ZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyLy5naXRpZ25vcmUgYi90b29scy9wb3dlci9jcHVwb3dlci8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZDdiNWEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMjEgQEAKKy5saWJzCitsaWJjcHVmcmVxLnNvCitsaWJjcHVmcmVxLnNvLjAKK2xpYmNwdWZyZXEuc28uMC4wLjAKK2J1aWxkL2NjZHYKK2NwdWZyZXEtaW5mbworY3B1ZnJlcS1zZXQKK2NwdWZyZXEtYXBlcmYKK2xpYi8ubGlicworbGliL2NwdWZyZXEubG8KK2xpYi9jcHVmcmVxLm8KK2xpYi9wcm9jLmxvCitsaWIvcHJvYy5vCitsaWIvc3lzZnMubG8KK2xpYi9zeXNmcy5vCitsaWJjcHVmcmVxLmxhCitwby9jcHVmcmVxdXRpbHMucG90Citwby8qLmdtbwordXRpbHMvY3B1ZnJlcS1pbmZvLm8KK3V0aWxzL2NwdWZyZXEtc2V0Lm8KK3V0aWxzL2NwdWZyZXEtYXBlcmYubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL0FVVEhPUlMgYi90b29scy9wb3dlci9jcHVwb3dlci9BVVRIT1JTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MGFmMmMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9BVVRIT1JTCkBAIC0wLDAgKzEsMTggQEAKK0RvbWluaWsgQnJvZG93c2tpCis8bGludXhAYnJvZG8uZGU+CisKK01hdHRpYSBEb25naWxpCit2aWEgTGF0aXNhbmEsIDgKKzAwMTc3IFJvbWUKK0l0YWx5Cis8bWFsYXR0aWFAZ21haWwuY29tPgorCitHb3JhbiBLb3J1Z2EKK1Nsb3ZlbmlhCis8a29ydWdhZ0BzaW9sLm5ldD4KKworVGhvbWFzIFJlbm5pbmdlcgorU1VTRSBMaW51eCBHbWJICitHZXJtYW55Cis8dHJlbm5Ac3VzZS5kZT4KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvQ09QWUlORyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwYzMxYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL0NPUFlJTkcKQEAgLTAsMCArMSwzNDAgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorDAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorDAorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisMCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisMCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyICBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvTWFrZWZpbGUgYi90b29scy9wb3dlci9jcHVwb3dlci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWYxZTNiCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvTWFrZWZpbGUKQEAgLTAsMCArMSwyNzMgQEAKKyMgTWFrZWZpbGUgZm9yIGNwdXBvd2VydXRpbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kubmV0PgorIworIyBCYXNlZCBsYXJnZWx5IG9uIHRoZSBNYWtlZmlsZSBmb3IgdWRldiBieToKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDAzLDIwMDQgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisjCisKKyMgLS0tIENPTkZJR1VSQVRJT04gQkVHSU4gLS0tCisKKyMgU2V0IHRoZSBmb2xsb3dpbmcgdG8gYHRydWUnIHRvIG1ha2UgYSB1bnN0cmlwcGVkLCB1bm9wdGltaXplZAorIyBiaW5hcnkuIExlYXZlIHRoaXMgc2V0IHRvIGBmYWxzZScgZm9yIHByb2R1Y3Rpb24gdXNlLgorREVCVUcgPz0JdHJ1ZQorCisjIG1ha2UgdGhlIGJ1aWxkIHNpbGVudC4gU2V0IHRoaXMgdG8gc29tZXRoaW5nIGVsc2UgdG8gbWFrZSBpdCBub2lzeSBhZ2Fpbi4KK1YgPz0JCWZhbHNlCisKKyMgSW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydCAob3V0cHV0IGluIGRpZmZlcmVudCBsYW5ndWFnZXMpLgorIyBSZXF1aXJlcyBnZXR0ZXh0LgorTkxTID89CQl0cnVlCisKKyMgU2V0IHRoZSBmb2xsb3dpbmcgdG8gJ3RydWUnIHRvIGJ1aWxkL2luc3RhbGwgdGhlCisjIGNwdWZyZXEtYmVuY2ggYmVuY2htYXJraW5nIHRvb2wKK0NQVUZSUV9CRU5DSCA/PSB0cnVlCisKKyMgUHJlZml4IHRvIHRoZSBkaXJlY3RvcmllcyB3ZSdyZSBpbnN0YWxsaW5nIHRvCitERVNURElSID89CQorCisjIC0tLSBDT05GSUdVUkFUSU9OIEVORCAtLS0KKworCisKKyMgUGFja2FnZS1yZWxhdGVkIGRlZmluaXRpb25zLiBEaXN0cmlidXRpb25zIGNhbiBtb2RpZnkgdGhlIHZlcnNpb24KKyMgYW5kIF9zaG91bGRfIG1vZGlmeSB0aGUgUEFDS0FHRV9CVUdSRVBPUlQgZGVmaW5pdGlvbgorCitWRVJTSU9OID0JCQkwMDlwMQorTElCX01BSj0JCQkwLjAuMAorTElCX01JTj0JCQkwCisKK1BBQ0tBR0UgPQkJCWNwdXBvd2VydXRpbHMKK1BBQ0tBR0VfQlVHUkVQT1JUID0JCWNwdWZyZXFAdmdlci5rZXJuZWwub3JnCitMQU5HVUFHRVMgPSAJCQlkZSBmciBpdCBjcyBwdAorCisKKyMgRGlyZWN0b3J5IGRlZmluaXRpb25zLiBUaGVzZSBhcmUgZGVmYXVsdCBhbmQgbW9zdCBwcm9iYWJseQorIyBkbyBub3QgbmVlZCB0byBiZSBjaGFuZ2VkLiBQbGVhc2Ugbm90ZSB0aGF0IERFU1RESVIgaXMKKyMgYWRkZWQgaW4gZnJvbnQgb2YgYW55IG9mIHRoZW0KKworYmluZGlyID89CS91c3IvYmluCitzYmluZGlyID89CS91c3Ivc2JpbgorbWFuZGlyID89CS91c3IvbWFuCitpbmNsdWRlZGlyID89CS91c3IvaW5jbHVkZQorbGliZGlyID89CS91c3IvbGliCitsb2NhbGVkaXIgPz0JL3Vzci9zaGFyZS9sb2NhbGUKK2RvY2RpciA/PSAgICAgICAvdXNyL3NoYXJlL2RvYy9wYWNrYWdlcy9jcHVwb3dlcnV0aWxzCitjb25mZGlyID89ICAgICAgL2V0Yy8KKworIyBUb29sY2hhaW46IHdoYXQgdG9vbHMgZG8gd2UgdXNlLCBhbmQgd2hhdCBvcHRpb25zIGRvIHRoZXkgbmVlZDoKKworQ1AgPSBjcCAtZnBSCitJTlNUQUxMID0gL3Vzci9iaW4vaW5zdGFsbCAtYworSU5TVEFMTF9QUk9HUkFNID0gJHtJTlNUQUxMfQorSU5TVEFMTF9EQVRBICA9ICR7SU5TVEFMTH0gLW0gNjQ0CitJTlNUQUxMX1NDUklQVCA9ICR7SU5TVEFMTF9QUk9HUkFNfQorCisjIElmIHlvdSBhcmUgcnVubmluZyBhIGNyb3NzIGNvbXBpbGVyLCB5b3UgbWF5IHdhbnQgdG8gc2V0IHRoaXMKKyMgdG8gc29tZXRoaW5nIG1vcmUgaW50ZXJlc3RpbmcsIGxpa2UgImFybS1saW51eC0iLiAgSWYgeW91IHdhbnQKKyMgdG8gY29tcGlsZSB2cyB1Q2xpYmMsIHRoYXQgY2FuIGJlIGRvbmUgaGVyZSBhcyB3ZWxsLgorQ1JPU1MgPSAjL3Vzci9pMzg2LWxpbnV4LXVjbGliYy91c3IvYmluL2kzODYtdWNsaWJjLQorQ0MgPSAkKENST1NTKWdjYworTEQgPSAkKENST1NTKWdjYworQVIgPSAkKENST1NTKWFyCitTVFJJUCA9ICQoQ1JPU1Mpc3RyaXAKK1JBTkxJQiA9ICQoQ1JPU1MpcmFubGliCitIT1NUQ0MgPSBnY2MKKworCisjIE5vdyB3ZSBzZXQgdXAgdGhlIGJ1aWxkIHN5c3RlbQorIworCisjIHNldCB1cCBQV0Qgc28gdGhhdCBvbGRlciB2ZXJzaW9ucyBvZiBtYWtlIHdpbGwgd29yayB3aXRoIG91ciBidWlsZC4KK1BXRCA9ICQoc2hlbGwgcHdkKQorCitleHBvcnQgQ1JPU1MgQ0MgQVIgU1RSSVAgUkFOTElCIENGTEFHUyBMREZMQUdTIExJQl9PQkpTCisKKyMgY2hlY2sgaWYgY29tcGlsZXIgb3B0aW9uIGlzIHN1cHBvcnRlZAorY2Mtc3VwcG9ydHMgPSAke3NoZWxsIGlmICQoQ0MpICR7MX0gLVMgLW8gL2Rldi9udWxsIC14YyAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbiBlY2hvICIkKDEpIjsgZmk7fQorCisjIHVzZSAnLU9zJyBvcHRpbWl6YXRpb24gaWYgYXZhaWxhYmxlLCBlbHNlIHVzZSAtTzIKK09QVElNSVpBVElPTiA6PSAkKGNhbGwgY2Mtc3VwcG9ydHMsLU9zLC1PMikKKworV0FSTklOR1MgOj0gLVdhbGwgLVdjaGFyLXN1YnNjcmlwdHMgLVdwb2ludGVyLWFyaXRoIC1Xc2lnbi1jb21wYXJlCitXQVJOSU5HUyArPSAkKGNhbGwgY2Mtc3VwcG9ydHMsLVduby1wb2ludGVyLXNpZ24pCitXQVJOSU5HUyArPSAkKGNhbGwgY2Mtc3VwcG9ydHMsLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQpCitXQVJOSU5HUyArPSAtV3NoYWRvdworCitDUFBGTEFHUyArPSAtRFZFUlNJT049XCIkKFZFUlNJT04pXCIgLURQQUNLQUdFPVwiJChQQUNLQUdFKVwiIFwKKwkJLURQQUNLQUdFX0JVR1JFUE9SVD1cIiQoUEFDS0FHRV9CVUdSRVBPUlQpXCIgLURfR05VX1NPVVJDRQorCitVVElMX09CSlMgPSAgdXRpbHMvaGVscGVycy9hbWQubyB1dGlscy9oZWxwZXJzL3RvcG9sb2d5Lm8gdXRpbHMvaGVscGVycy9tc3IubyBcCisJdXRpbHMvaGVscGVycy9zeXNmcy5vIHV0aWxzL2hlbHBlcnMvbWlzYy5vIHV0aWxzL2hlbHBlcnMvY3B1aWQubyBcCisJdXRpbHMvaGVscGVycy9wY2kubyB1dGlscy9oZWxwZXJzL2JpdG1hc2subyBcCisJdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLm8gdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLm8gXAorCXV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUubyB1dGlscy9pZGxlX21vbml0b3IvY3B1aWRsZV9zeXNmcy5vIFwKKwl1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5vIHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLm8gXAorCXV0aWxzL2NwdXBvd2VyLm8gdXRpbHMvY3B1ZnJlcS1pbmZvLm8gdXRpbHMvY3B1ZnJlcS1zZXQubyBcCisJdXRpbHMvY3B1cG93ZXItc2V0Lm8gdXRpbHMvY3B1cG93ZXItaW5mby5vIHV0aWxzL2NwdWlkbGUtaW5mby5vCisKK1VUSUxfSEVBREVSUyA9IHV0aWxzL2hlbHBlcnMvaGVscGVycy5oIHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmggXAorCXV0aWxzL2hlbHBlcnMvYml0bWFzay5oIFwKKwl1dGlscy9pZGxlX21vbml0b3IvaWRsZV9tb25pdG9ycy5oIHV0aWxzL2lkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmRlZgorCitVVElMX1NSQyA6PSAkKFVUSUxfT0JKUzoubz0uYykKKworTElCX0hFQURFUlMgPSAJbGliL2NwdWZyZXEuaCBsaWIvc3lzZnMuaAorTElCX1NSQyA9IAlsaWIvY3B1ZnJlcS5jIGxpYi9zeXNmcy5jCitMSUJfT0JKUyA9IAlsaWIvY3B1ZnJlcS5vIGxpYi9zeXNmcy5vCisKK0NGTEFHUyArPQktcGlwZQorCitpZmVxICgkKHN0cmlwICQoTkxTKSksdHJ1ZSkKKwlJTlNUQUxMX05MUyArPSBpbnN0YWxsLWdtbworCUNPTVBJTEVfTkxTICs9IHVwZGF0ZS1nbW8KK2VuZGlmCisKK2lmZXEgKCQoc3RyaXAgJChDUFVGUlFfQkVOQ0gpKSx0cnVlKQorCUlOU1RBTExfQkVOQ0ggKz0gaW5zdGFsbC1iZW5jaAorCUNPTVBJTEVfQkVOQ0ggKz0gY29tcGlsZS1iZW5jaAorZW5kaWYKKworQ0ZMQUdTICs9ICQoV0FSTklOR1MpCisKK2lmZXEgKCQoc3RyaXAgJChWKSksZmFsc2UpCisJUVVJRVQ9QCQoUFdEKS9idWlsZC9jY2R2CisJSE9TVF9QUk9HUz1idWlsZC9jY2R2CitlbHNlCisJUVVJRVQ9CisJSE9TVF9QUk9HUz0KK2VuZGlmCisKKyMgaWYgREVCVUcgaXMgZW5hYmxlZCwgdGhlbiB3ZSBkbyBub3Qgc3RyaXAgb3Igb3B0aW1pemUKK2lmZXEgKCQoc3RyaXAgJChERUJVRykpLHRydWUpCisJQ0ZMQUdTICs9IC1PMSAtZworCUNQUEZMQUdTICs9IC1EREVCVUcKKwlTVFJJUENNRCA9IC9iaW4vdHJ1ZSAtU2luY2Vfd2VfYXJlX2RlYnVnZ2luZworZWxzZQorCUNGTEFHUyArPSAkKE9QVElNSVpBVElPTikgLWZvbWl0LWZyYW1lLXBvaW50ZXIKKwlTVFJJUENNRCA9ICQoU1RSSVApIC1zIC0tcmVtb3ZlLXNlY3Rpb249Lm5vdGUgLS1yZW1vdmUtc2VjdGlvbj0uY29tbWVudAorZW5kaWYKKworCisjIHRoZSBhY3R1YWwgbWFrZSBydWxlcworCithbGw6IGNjZHYgbGliY3B1ZnJlcSBjcHVwb3dlciAkKENPTVBJTEVfTkxTKSAkKENPTVBJTEVfQkVOQ0gpCisKK2NjZHY6IGJ1aWxkL2NjZHYKK2J1aWxkL2NjZHY6IGJ1aWxkL2NjZHYuYworCUBlY2hvICJCdWlsZGluZyBjY2R2IgorCUAkKEhPU1RDQykgLU8xICQ8IC1vICRACisKK2xpYi8lLm86ICQoTElCX1NSQykgJChMSUJfSEVBREVSUykgYnVpbGQvY2NkdgorCSQoUVVJRVQpICQoQ0MpICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKSAtZlBJQyAtbyAkQCAtYyBsaWIvJCouYworCitsaWJjcHVmcmVxLnNvLiQoTElCX01BSik6ICQoTElCX09CSlMpCisJJChRVUlFVCkgJChDQykgLXNoYXJlZCAkKENQUEZMQUdTKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCBcCisJCS1XbCwtc29uYW1lLGxpYmNwdWZyZXEuc28uJChMSUJfTUlOKSAkKExJQl9PQkpTKQorCUBsbiAtc2YgJEAgbGliY3B1ZnJlcS5zbworCUBsbiAtc2YgJEAgbGliY3B1ZnJlcS5zby4kKExJQl9NSU4pCisKK2xpYmNwdWZyZXE6IGxpYmNwdWZyZXEuc28uJChMSUJfTUFKKQorCisjIExldCBhbGwgLm8gZmlsZXMgZGVwZW5kIG9uIGl0cyAuYyBmaWxlIGFuZCBhbGwgaGVhZGVycworIyBNaWdodCBiZSB3b3J0aCB0byBwdXQgdGhpcyBpbnRvIHV0aWxzL01ha2VmaWxlIGF0IHNvbWUgcG9pbnQgb2YgdGltZQorJChVVElMX09CSlMpOiAkKFVUSUxfSEVBREVSUykKKworLmMubzoKKwkkKFFVSUVUKSAkKENDKSAkKENGTEFHUykgJChDUFBGTEFHUykgLUkuL2xpYiAtSSAuL3V0aWxzIC1vICRAIC1jICQqLmMKKworY3B1cG93ZXI6ICQoVVRJTF9PQkpTKSBsaWJjcHVmcmVxCisJJChRVUlFVCkgJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLWxjcHVmcmVxIC1scnQgLWxwY2kgLUwuIC1vICRAICQoVVRJTF9PQkpTKQorCSQoU1RSSVBDTUQpICRACisKK3BvLyQoUEFDS0FHRSkucG90OiAkKFVUSUxfU1JDKQorCUB4Z2V0dGV4dCAtLWRlZmF1bHQtZG9tYWluPSQoUEFDS0FHRSkgLS1hZGQtY29tbWVudHMgXAorCQktLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8gJChVVElMX1NSQykgJiYgXAorCXRlc3QgLWYgJChQQUNLQUdFKS5wbyAmJiBcCisJbXYgLWYgJChQQUNLQUdFKS5wbyBwby8kKFBBQ0tBR0UpLnBvdAorCit1cGRhdGUtZ21vOiBwby8kKFBBQ0tBR0UpLnBvdAorCSBAZm9yIEhMQU5HIGluICQoTEFOR1VBR0VTKTsgZG8gXAorCQllY2hvIC1uICJUcmFuc2xhdGluZyAkJEhMQU5HICI7IFwKKwkJaWYgbXNnbWVyZ2UgcG8vJCRITEFORy5wbyBwby8kKFBBQ0tBR0UpLnBvdCAtbyBcCisJCSAgIHBvLyQkSExBTkcubmV3LnBvOyB0aGVuIFwKKwkJCW12IC1mIHBvLyQkSExBTkcubmV3LnBvIHBvLyQkSExBTkcucG87IFwKKwkJZWxzZSBcCisJCQllY2hvICJtc2dtZXJnZSBmb3IgJCRITEFORyBmYWlsZWQhIjsgXAorCQkJcm0gLWYgcG8vJCRITEFORy5uZXcucG87IFwKKwkJZmk7IFwKKwkJbXNnZm10IC0tc3RhdGlzdGljcyAtbyBwby8kJEhMQU5HLmdtbyBwby8kJEhMQU5HLnBvOyBcCisJZG9uZTsKKworY29tcGlsZS1iZW5jaDogbGliY3B1ZnJlcS5zby4kKExJQl9NQUopCisJQFY9JChWKSBjb25mZGlyPSQoY29uZmRpcikgJChNQUtFKSAtQyBiZW5jaAorCitjbGVhbjoKKwktZmluZCAuIFwoIC1ub3QgLXR5cGUgZCBcKSAtYW5kIFwoIC1uYW1lICcqficgLW8gLW5hbWUgJyouW29hc10nIFwpIC10eXBlIGYgLXByaW50IFwKKwkgfCB4YXJncyBybSAtZgorCS1ybSAtZiAkKFVUSUxfQklOUykKKwktcm0gLWYgJChJRExFX09CSlMpCisJLXJtIC1mIGNwdXBvd2VyCisJLXJtIC1mIGxpYmNwdWZyZXEuc28qCisJLXJtIC1mIGJ1aWxkL2NjZHYKKwktcm0gLXJmIHBvLyouZ21vIHBvLyoucG90CisJJChNQUtFKSAtQyBiZW5jaCBjbGVhbgorCisKK2luc3RhbGwtbGliOgorCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSR7bGliZGlyfQorCSQoQ1ApIGxpYmNwdWZyZXEuc28qICQoREVTVERJUikke2xpYmRpcn0vCisJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJHtpbmNsdWRlZGlyfQorCSQoSU5TVEFMTF9EQVRBKSBsaWIvY3B1ZnJlcS5oICQoREVTVERJUikke2luY2x1ZGVkaXJ9L2NwdWZyZXEuaAorCitpbnN0YWxsLXRvb2xzOgorCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSR7YmluZGlyfQorCSQoSU5TVEFMTF9QUk9HUkFNKSBjcHVwb3dlciAkKERFU1RESVIpJHtiaW5kaXJ9CisKK2luc3RhbGwtbWFuOgorCSQoSU5TVEFMTF9EQVRBKSAtRCBtYW4vY3B1cG93ZXIuMSAkKERFU1RESVIpJHttYW5kaXJ9L21hbjEvY3B1cG93ZXIuMQorCSQoSU5TVEFMTF9EQVRBKSAtRCBtYW4vY3B1cG93ZXItZnJlcXVlbmN5LXNldC4xICQoREVTVERJUikke21hbmRpcn0vbWFuMS9jcHVwb3dlci1mcmVxdWVuY3ktc2V0LjEKKwkkKElOU1RBTExfREFUQSkgLUQgbWFuL2NwdXBvd2VyLWZyZXF1ZW5jeS1pbmZvLjEgJChERVNURElSKSR7bWFuZGlyfS9tYW4xL2NwdXBvd2VyLWZyZXF1ZW5jeS1pbmZvLjEKKwkkKElOU1RBTExfREFUQSkgLUQgbWFuL2NwdXBvd2VyLXNldC4xICQoREVTVERJUikke21hbmRpcn0vbWFuMS9jcHVwb3dlci1zZXQuMQorCSQoSU5TVEFMTF9EQVRBKSAtRCBtYW4vY3B1cG93ZXItaW5mby4xICQoREVTVERJUikke21hbmRpcn0vbWFuMS9jcHVwb3dlci1pbmZvLjEKKwkkKElOU1RBTExfREFUQSkgLUQgbWFuL2NwdXBvd2VyLW1vbml0b3IuMSAkKERFU1RESVIpJHttYW5kaXJ9L21hbjEvY3B1cG93ZXItbW9uaXRvci4xCisKK2luc3RhbGwtZ21vOgorCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSR7bG9jYWxlZGlyfQorCWZvciBITEFORyBpbiAkKExBTkdVQUdFUyk7IGRvIFwKKwkJZWNobyAnJChJTlNUQUxMX0RBVEEpIC1EIHBvLyQkSExBTkcuZ21vICQoREVTVERJUikke2xvY2FsZWRpcn0vJCRITEFORy9MQ19NRVNTQUdFUy9jcHVwb3dlcnV0aWxzLm1vJzsgXAorCQkkKElOU1RBTExfREFUQSkgLUQgcG8vJCRITEFORy5nbW8gJChERVNURElSKSR7bG9jYWxlZGlyfS8kJEhMQU5HL0xDX01FU1NBR0VTL2NwdXBvd2VydXRpbHMubW87IFwKKwlkb25lOworCitpbnN0YWxsLWJlbmNoOgorCUAjREVTVERJUiBtdXN0IGJlIHNldCBmcm9tIG91dHNpZGUgdG8gc3Vydml2ZQorCUBzYmluZGlyPSQoc2JpbmRpcikgYmluZGlyPSQoYmluZGlyKSBkb2NkaXI9JChkb2NkaXIpIGNvbmZkaXI9JChjb25mZGlyKSAkKE1BS0UpIC1DIGJlbmNoIGluc3RhbGwKKyAgICAgICAKK2luc3RhbGw6IGFsbCBpbnN0YWxsLWxpYiBpbnN0YWxsLXRvb2xzIGluc3RhbGwtbWFuICQoSU5TVEFMTF9OTFMpICQoSU5TVEFMTF9CRU5DSCkKKwordW5pbnN0YWxsOgorCS0gcm0gLWYgJChERVNURElSKSR7bGliZGlyfS9saWJjcHVmcmVxLioKKwktIHJtIC1mICQoREVTVERJUikke2luY2x1ZGVkaXJ9L2NwdWZyZXEuaAorCS0gcm0gLWYgJChERVNURElSKSR7YmluZGlyfS91dGlscy9jcHVwb3dlcgorCS0gcm0gLWYgJChERVNURElSKSR7bWFuZGlyfS9tYW4xL2NwdWZyZXEtc2V0LjEKKwktIHJtIC1mICQoREVTVERJUikke21hbmRpcn0vbWFuMS9jcHVmcmVxLWluZm8uMQorCS0gZm9yIEhMQU5HIGluICQoTEFOR1VBR0VTKTsgZG8gXAorCQlybSAtZiAkKERFU1RESVIpJHtsb2NhbGVkaXJ9LyQkSExBTkcvTENfTUVTU0FHRVMvY3B1cG93ZXJ1dGlscy5tbzsgXAorCSAgZG9uZTsKKworLlBIT05ZOiBhbGwgdXRpbHMgbGliY3B1ZnJlcSBjY2R2IHVwZGF0ZS1wbyB1cGRhdGUtZ21vIGluc3RhbGwtbGliIGluc3RhbGwtdG9vbHMgaW5zdGFsbC1tYW4gaW5zdGFsbC1nbW8gaW5zdGFsbCB1bmluc3RhbGwgXAorCWNsZWFuIApkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvUkVBRE1FIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOWQ0YzAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9SRUFETUUKQEAgLTAsMCArMSw0OSBAQAorVGhlIGNwdWZyZXF1dGlscyBwYWNrYWdlIChob21lcGFnZTogCitodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9jcHVmcmVxL2NwdWZyZXF1dGlscy5odG1sICkgCitjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGVsZW1lbnRzOgorCityZXF1aXJlbWVudHMKKy0tLS0tLS0tLS0tLQorCitPbiB4ODYgcGNpdXRpbHMgaXMgbmVlZGVkIGF0IHJ1bnRpbWUgKC1scGNpKS4KK0ZvciBjb21waWxhdGlvbiBwY2l1dGlscy1kZXZlbCAocGNpL3BjaS5oKSBhbmQgYSBnY2MgdmVyc2lvbgorcHJvdmlkaW5nIGNwdWlkLmggaXMgbmVlZGVkLgorRm9yIGJvdGggaXQncyBub3QgZXhwbGljaXRseSBjaGVja2VkIGZvciAoeWV0KS4KKworCitsaWJjcHVmcmVxCistLS0tLS0tLS0tCisKKyJsaWJjcHVmcmVxIiBpcyBhIGxpYnJhcnkgd2hpY2ggb2ZmZXJzIGEgdW5pZmllZCBhY2Nlc3MgbWV0aG9kIGZvciB1c2Vyc3BhY2UKK3Rvb2xzIGFuZCBwcm9ncmFtcyB0byB0aGUgY3B1ZnJlcSBjb3JlIGFuZCBkcml2ZXJzIGluIHRoZSBMaW51eCBrZXJuZWwuIFRoaXMKK2FsbG93cyBmb3IgY29kZSByZWR1Y3Rpb24gaW4gdXNlcnNwYWNlIHRvb2xzLCBhIGNsZWFuIGltcGxlbWVudGF0aW9uIG9mCit0aGUgaW50ZXJhY3Rpb24gdG8gdGhlIGNwdWZyZXEgY29yZSwgYW5kIHN1cHBvcnQgZm9yIGJvdGggdGhlIHN5c2ZzIGFuZCBwcm9jCitpbnRlcmZhY2VzIFtkZXBlbmRpbmcgb24gY29uZmlndXJhdGlvbiwgc2VlIGJlbG93XS4KKworCitjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21ha2UKK3N1CittYWtlIGluc3RhbGwKKworc2hvdWxkIHN1ZmZpY2Ugb24gbW9zdCBzeXN0ZW1zLiBJdCBidWlsZHMgZGVmYXVsdCBsaWJjcHVmcmVxLAorY3B1ZnJlcS1zZXQgYW5kIGNwdWZyZXEtaW5mbyBmaWxlcyBhbmQgaW5zdGFsbHMgdGhlbSBpbiAvdXNyL2xpYiBhbmQKKy91c3IvYmluLCByZXNwZWN0aXZlbHkuIElmIHlvdSB3YW50IHRvIHNldCB1cCB0aGUgcGF0aHMgZGlmZmVyZW50bHkgYW5kL29yCit3YW50IHRvIGNvbmZpZ3VyZSB0aGUgcGFja2FnZSB0byB5b3VyIHNwZWNpZmljIG5lZWRzLCB5b3UgbmVlZCB0byBvcGVuCisiTWFrZWZpbGUiIHdpdGggYW4gZWRpdG9yIG9mIHlvdXIgY2hvaWNlIGFuZCBlZGl0IHRoZSBibG9jayBtYXJrZWQKK0NPTkZJR1VSQVRJT04uCisKKworVEhBTktTCistLS0tLS0KK01hbnkgdGhhbmtzIHRvIE1hdHRpYSBEb25naWxpIHdobyB3cm90ZSB0aGUgYXV0b3Rvb2xpemF0aW9uIGFuZAorbGlidG9vbGl6YXRpb24sIHRoZSBtYW5wYWdlcyBhbmQgdGhlIGl0YWxpYW4gbGFuZ3VhZ2UgZmlsZSBmb3IgY3B1ZnJlcXV0aWxzOwordG8gRGF2ZSBKb25lcyBmb3IgaGlzIGZlZWRiYWNrIGFuZCBoaXMgZHVtcF9wc2IgdG9vbDsgdG8gQnJ1bm8gRHVjcm90IGZvciBoaXMKK3Bvd2Vybm93LWs4LWRlY29kZSBhbmQgaW50ZWxfZ3NpYyB0b29scyBhcyB3ZWxsIGFzIHRoZSBmcmVuY2ggbGFuZ3VhZ2UgZmlsZTsKK2FuZCB0byB2YXJpb3VzIG90aGVycyBjb21tZW50aW5nIG9uIHRoZSBwcmV2aW91cyAocHJlLSlyZWxlYXNlcyBvZiAKK2NwdWZyZXF1dGlscy4KKworCisgICAgICAgIERvbWluaWsgQnJvZG93c2tpCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9Ub0RvIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvVG9EbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzRiNzhiCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvVG9EbwpAQCAtMCwwICsxLDExIEBACitUb0RvcyBzb3J0ZWQgYnkgcHJpb3JpdHk6CisKKy0gVXNlIGJpdG1hc2sgZnVuY3Rpb25zIHRvIHBhcnNlIENQVSB0b3BvbG9neSBtb3JlIHJvYnVzdAorICAoY3VycmVudCBpbXBsZW1lbnRhdGlvbiBoYXMgaXNzdWVzIG9uIEFNRCkKKy0gVHJ5IHRvIHJlYWQgb3V0IGJvb3N0IHN0YXRlcyBhbmQgZnJlcXVlbmNpZXMgb24gSW50ZWwKKy0gQWRqdXN0IFJFQURNRQorLSBTb21ld2hlcmUgc2F3IHRoZSBhYmlsaXR5IHRvIHJlYWQgcG93ZXIgY29uc3VtcHRpb24gb2YKKyAgUkFNIGZyb20gSFcgb24gSW50ZWwgU2FuZHlCcmlkZ2UgLT4gYW5vdGhlciBtb25pdG9yPworLSBBZGQgYW5vdGhlciBjMWUgZGVidWcgaWRsZSBtb25pdG9yCisgIC0+IElzIGJ5IGRlc2lnbiByYWN5IHdpdGggQklPUywgYnV0IGNvdWxkIGJlIGFkZGVkCisgICAgIHdpdGggYSAtLWZvcmNlIG9wdGlvbiBhbmQgc29tZSAiYmUgY2FyZWZ1bCIgbWVzc2FnZXMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL01ha2VmaWxlIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4ZmEyMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL01ha2VmaWxlCkBAIC0wLDAgKzEsMzAgQEAKK0xJQlMgPSAtTC4uLyAtbG0gLWxjcHVmcmVxCisKK09CSlMgPSBtYWluLm8gcGFyc2UubyBzeXN0ZW0ubyBiZW5jaG1hcmsubworQ0ZMQUdTICs9IC1EX0dOVV9TT1VSQ0UgLUkuLi9saWIgLURERUZBVUxUX0NPTkZJR19GSUxFPVwiJChjb25mZGlyKS9jcHVmcmVxLWJlbmNoLmNvbmZcIgorCitpZmVxICgkKHN0cmlwICQoVikpLGZhbHNlKQorCUNDPUAuLi9idWlsZC9jY2R2IGdjYworZWxzZQorCUNDPWdjYworZW5kaWYKKworY3B1ZnJlcS1iZW5jaDogJChPQkpTKQorCSQoQ0MpIC1vICRAICQoQ0ZMQUdTKSAkKE9CSlMpICQoTElCUykKKworYWxsOiBjcHVmcmVxLWJlbmNoCisKK2luc3RhbGw6CisJbWtkaXIgLXAgJChERVNURElSKS8kKHNiaW5kaXIpCisJbWtkaXIgLXAgJChERVNURElSKS8kKGJpbmRpcikKKwlta2RpciAtcCAkKERFU1RESVIpLyQoZG9jZGlyKQorCW1rZGlyIC1wICQoREVTVERJUikvJChjb25mZGlyKQorCWluc3RhbGwgLW0gNzU1IGNwdWZyZXEtYmVuY2ggJChERVNURElSKS8kKHNiaW5kaXIpL2NwdWZyZXEtYmVuY2gKKwlpbnN0YWxsIC1tIDc1NSBjcHVmcmVxLWJlbmNoX3Bsb3Quc2ggJChERVNURElSKS8kKGJpbmRpcikvY3B1ZnJlcS1iZW5jaF9wbG90LnNoCisJaW5zdGFsbCAtbSA2NDQgUkVBRE1FLUJFTkNIICQoREVTVERJUikvJChkb2NkaXIpL1JFQURNRS1CRU5DSAorCWluc3RhbGwgLW0gNzU1IGNwdWZyZXEtYmVuY2hfc2NyaXB0LnNoICQoREVTVERJUikvJChkb2NkaXIpL2NwdWZyZXEtYmVuY2hfc2NyaXB0LnNoCisJaW5zdGFsbCAtbSA2NDQgZXhhbXBsZS5jZmcgJChERVNURElSKS8kKGNvbmZkaXIpL2NwdWZyZXEtYmVuY2guY29uZgorCitjbGVhbjoKKwlybSAtZiAqLm8KKwlybSAtZiBjcHVmcmVxLWJlbmNoCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9SRUFETUUtQkVOQ0ggYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9SRUFETUUtQkVOQ0gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5M2VjNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL1JFQURNRS1CRU5DSApAQCAtMCwwICsxLDEyNCBAQAorVGhpcyBpcyBjcHVmcmVxLWJlbmNoLCBhIG1pY3JvYmVuY2htYXJrIGZvciB0aGUgY3B1ZnJlcSBmcmFtZXdvcmsuCisKK1B1cnBvc2UKKz09PT09PT0KKworV2hhdCBpcyB0aGlzIGJlbmNobWFyayBmb3I6CisgIC0gSWRlbnRpZnkgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBsb3NzIHdoZW4gZG9pbmcgZHluYW1pYyBmcmVxdWVuY3kKKyAgICBzY2FsaW5nIHVzaW5nIExpbnV4IGtlcm5lbCBnb3Zlcm5vcnMKKyAgLSBJZGVudGlmeSBhdmVyYWdlIHJlYWN0aW9uIHRpbWUgb2YgYSBnb3Zlcm5vciB0byBDUFUgbG9hZCBjaGFuZ2VzCisgIC0gKFN0cmVzcykgVGVzdGluZyB3aGV0aGVyIGEgY3B1ZnJlcSBsb3cgbGV2ZWwgZHJpdmVyIG9yIGdvdmVybm9yIHdvcmtzCisgICAgYXMgZXhwZWN0ZWQKKyAgLSBJZGVudGlmeSBjcHVmcmVxIHJlbGF0ZWQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgYmV0d2VlbiBrZXJuZWxzCisgIC0gUG9zc2libHkgUmVhbCB0aW1lIHByaW9yaXR5IHRlc3Rpbmc/IC0+IHdoYXQgaGFwcGVucyBpZiB0aGVyZSBhcmUKKyAgICBwcm9jZXNzZXMgd2l0aCBhIGhpZ2hlciBwcmlvIHRoYW4gdGhlIGdvdmVybm9yJ3Mga2VybmVsIHRocmVhZAorICAtIC4uLgorCitXaGF0IHRoaXMgYmVuY2htYXJrIGRvZXMgKm5vdCogY292ZXI6CisgIC0gUG93ZXIgc2F2aW5nIHJlbGF0ZWQgcmVncmVzc2lvbnMgKEluIGZhY3QgYXMgYmV0dGVyIHRoZSBwZXJmb3JtYW5jZQorICAgIHRocm91Z2hwdXQgaXMsIHRoZSB3b3JzZSB0aGUgcG93ZXIgc2F2aW5ncyB3aWxsIGJlLCBidXQgdGhlIGZpcnN0IHNob3VsZAorICAgIG1vc3RseSBjb3VudCBtb3JlLi4uKQorICAtIFJlYWwgd29ybGQgKHdvcmtsb2FkcykKKworCitEZXNjcmlwdGlvbgorPT09PT09PT09PT0KKworY3B1ZnJlcS1iZW5jaCBoZWxwcyB0byB0ZXN0IHRoZSBjb25kaXRpb24gb2YgYSBnaXZlbiBjcHVmcmVxIGdvdmVybm9yLgorRm9yIHRoYXQgcHVycG9zZSwgaXQgY29tcGFyZXMgdGhlIHBlcmZvcm1hbmNlIGdvdmVybm9yIHRvIGEgY29uZmlndXJlZAorcG93ZXJzYXZlIG1vZHVsZS4KKworCitIb3cgaXQgd29ya3MKKz09PT09PT09PT09PQorWW91IGNhbiBzcGVjaWZ5IGxvYWQgKDEwMCUgQ1BVIGxvYWQpIGFuZCBzbGVlcCAoMCUgQ1BVIGxvYWQpIHRpbWVzIGluIHVzIHdoaWNoCit3aWxsIGJlIHJ1biBYIHRpbWUgaW4gYSByb3cgKGN5Y2xlcyk6CisKKyAgICAgICAgIHNsZWVwPTI1MDAwCisgICAgICAgICBsb2FkPTI1MDAwCisgICAgICAgICBjeWNsZXM9MjAKKworVGhpcyBwYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgd2lsbCBjcmVhdGUgMjVtcyBsb2FkL3NsZWVwIHR1cm5zLAorcmVwZWF0ZWQgMjAgdGltZXMuCisKK0FkZGluZyB0aGlzOgorICAgICAgICAgc2xlZXBfc3RlcD0yNTAwMAorICAgICAgICAgbG9hZF9zdGVwPTI1MDAwCisgICAgICAgICByb3VuZHM9NQorV2lsbCBpbmNyZWFzZSBsb2FkIGFuZCBzbGVlcCB0aW1lIGJ5IDI1bXMgNSB0aW1lcy4KK1RvZ2V0aGVyIHlvdSBnZXQgZm9sbG93aW5nIHRlc3Q6CisyNW1zICBsb2FkL3NsZWVwIHRpbWUgcmVwZWF0ZWQgMjAgdGltZXMgKGN5Y2xlcykuCis1MG1zICBsb2FkL3NsZWVwIHRpbWUgcmVwZWF0ZWQgMjAgdGltZXMgKGN5Y2xlcykuCisuLgorMTAwbXMgbG9hZC9zbGVlcCB0aW1lIHJlcGVhdGVkIDIwIHRpbWVzIChjeWNsZXMpLgorCitGaXJzdCBpdCBpcyBjYWxpYnJhdGVkIGhvdyBsb25nIGEgc3BlY2lmaWMgQ1BVIGludGVuc2l2ZSBjYWxjdWxhdGlvbgordGFrZXMgb24gdGhpcyBtYWNoaW5lIGFuZCBuZWVkcyB0byBiZSBydW4gaW4gYSBsb29wIHVzaW5nIHRoZSBwZXJmb3JtYW5jZQorZ292ZXJub3IuCitUaGVuIHRoZSBhYm92ZSB0ZXN0IHJ1bnMgYXJlIHByb2Nlc3NlZCB1c2luZyB0aGUgcGVyZm9ybWFuY2UgZ292ZXJub3IKK2FuZCB0aGUgZ292ZXJub3IgdG8gdGVzdC4gVGhlIHRpbWUgdGhlIGNhbGN1bGF0aW9uIHJlYWxseSBuZWVkZWQKK3dpdGggdGhlIGR5bmFtaWMgZnJlcSBzY2FsaW5nIGdvdmVybm9yIGlzIGNvbXBhcmVkIHdpdGggdGhlIHRpbWUgbmVlZGVkCitvbiBmdWxsIHBlcmZvcm1hbmNlIGFuZCB5b3UgZ2V0IHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIGxvc3MuCisKKworRXhhbXBsZSBvZiBleHBlY3RlZCByZXN1bHRzIHdpdGggb25kZW1hbmQgZ292ZXJub3I6CisKK1RoaXMgc2hvd3MgZXhwZWN0ZWQgcmVzdWx0cyBvZiB0aGUgZmlyc3QgdHdvIHRlc3QgcnVuIHJvdW5kcyBmcm9tCithYm92ZSBjb25maWcsIHlvdSB0aGVyZSBoYXZlOgorCisxMDAlIENQVSBsb2FkIChsb2FkKSB8IDAgJSBDUFUgbG9hZCAoc2xlZXApICB8IHJvdW5kCisgICAyNSBtcyAgICAgICAgICAgICB8ICAgIDI1IG1zICAgICAgICAgICAgICB8ICAgMQorICAgNTAgbXMgICAgICAgICAgICAgfCAgICA1MCBtcyAgICAgICAgICAgICAgfCAgIDIKKworRm9yIGV4YW1wbGUgaWYgb25kZW1hbmQgZ292ZXJub3IgaXMgY29uZmlndXJlZCB0byBoYXZlIGEgNTBtcworc2FtcGxpbmcgcmF0ZSB5b3UgZ2V0OgorCitJbiByb3VuZCAxLCBvbmRlbWFuZCBzaG91bGQgaGF2ZSByYXRoZXIgc3RhdGljIDUwJSBsb2FkIGFuZCBwcm9iYWJseQord29uJ3QgZXZlciBzd2l0Y2ggdXAgKGFzIGxvbmcgYXMgdXBfdGhyZXNob2xkIGlzIGFib3ZlKS4KKworSW4gcm91bmQgMiwgaWYgdGhlIG9uZGVtYW5kIHNhbXBsaW5nIHRpbWVzIGV4YWN0bHkgbWF0Y2ggdGhlIGxvYWQvc2xlZXAKK3RyaWdnZXIgb2YgdGhlIGNwdWZyZXEtYmVuY2gsIHlvdSB3aWxsIHNlZSBubyBwZXJmb3JtYW5jZSBsb3NzIChjb21wYXJlIHdpdGgKK2JlbG93IHBvc3NpYmxlIG9uZGVtYW5kIHNhbXBsZSBraWNrIGlucyAoMSkpOgorCitCdXQgaWYgb25kZW1hbmQgYWx3YXlzIGtpY2tzIGluIGluIHRoZSBtaWRkbGUgb2YgdGhlIGxvYWQgc2xlZXAgY3ljbGVzLCBpdAord2lsbCBhbHdheXMgc2VlIDUwJSBsb2FkcyBhbmQgeW91IGdldCB3b3JzdCBwZXJmb3JtYW5jZSBpbXBhY3QgbmV2ZXIKK3N3aXRjaGluZyB1cCAoY29tcGFyZSB3aXRoIGJlbG93IHBvc3NpYmxlIG9uZGVtYW5kIHNhbXBsZSBraWNrIGlucyAoMikpOjoKKworICAgICAgNTAgICAgIDUwICAgNTAgICA1MG1zIC0+dGltZQorbG9hZCAtLS0tLXwgICAgIHwtLS0tLXwgICAgIHwtLS0tLXwgICAgIHwtLS0tLXwKKyAgICAgICAgICB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8CitzbGVlcCAgICAgfC0tLS0tfCAgICAgfC0tLS0tfCAgICAgfC0tLS0tfCAgICAgfC0tLS0KKyAgICB8LS0tLS18LS0tLS18LS0tLS18LS0tLS18LS0tLS18LS0tLS18LS0tLS18LS0tLSAgb25kZW1hbmQgc2FtcGxpbmcgKDEpCisgICAgICAgICAxMDAgICAgMCAgICAxMDAgICAgMCAgICAxMDAgICAgMCAgICAxMDAgICAgIGxvYWQgc2VlbiBieSBvbmRlbWFuZCglKQorICAgICAgIHwtLS0tLXwtLS0tLXwtLS0tLXwtLS0tLXwtLS0tLXwtLS0tLXwtLS0tLXwtLSAgIG9uZGVtYW5kIHNhbXBsaW5nICgyKQorICAgICAgNTAgICAgIDUwICAgIDUwICAgIDUwICAgIDUwICAgIDUwICAgIDUwICAgICAgICBsb2FkIHNlZW4gYnkgb25kZW1hbmQoJSkKKworWW91IGNhbiBlYXNpbHkgdGVzdCBhbGwga2luZCBvZiBsb2FkL3NsZWVwIHRpbWVzIGFuZCBjaGVjayB3aGV0aGVyIHlvdXIKK2dvdmVybm9yIGluIGF2ZXJhZ2UgYmVoYXZlcyBhcyBleHBlY3RlZC4KKworCitUb0RvCis9PT09CisKK1Byb3ZpZGUgYSBnbnVwbG90IHV0aWxpdHkgc2NyaXB0IGZvciBlYXN5IGdlbmVyYXRpb24gb2YgcGxvdHMgdG8gcHJlc2VudAordGhlIG91dGNvbWUgbmljZWx5LgorCisKK2NwdWZyZXEtYmVuY2ggQ29tbWFuZCBVc2FnZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09CistbCwgLS1sb2FkPTxsb25nIGludD4gICAgICAgICAgIGluaXRpYWwgbG9hZCB0aW1lIGluIHVzCistcywgLS1zbGVlcD08bG9uZyBpbnQ+ICAgICAgICAgIGluaXRpYWwgc2xlZXAgdGltZSBpbiB1cworLXgsIC0tbG9hZC1zdGVwPTxsb25nIGludD4gICAgICB0aW1lIHRvIGJlIGFkZGVkIHRvIGxvYWQgdGltZSwgaW4gdXMKKy15LCAtLXNsZWVwLXN0ZXA9PGxvbmcgaW50PiAgICAgdGltZSB0byBiZSBhZGRlZCB0byBzbGVlcCB0aW1lLCBpbiB1cworLWMsIC0tY3B1PTx1bnNpZ25lZCBpbnQ+ICAgICAgICBDUFUgTnVtYmVyIHRvIHVzZSwgc3RhcnRpbmcgYXQgMAorLXAsIC0tcHJpbz08cHJpb3JpdHk+ICAgICAgICAgICBzY2hlZHVsZXIgcHJpb3JpdHksIEhJR0gsIExPVyBvciBERUZBVUxUCistZywgLS1nb3Zlcm5vcj08Z292ZXJub3I+ICAgICAgIGNwdWZyZXEgZ292ZXJub3IgdG8gdGVzdAorLW4sIC0tY3ljbGVzPTxpbnQ+ICAgICAgICAgICAgICBsb2FkL3NsZWVwIGN5Y2xlcyB0byBnZXQgYW4gYXZhcmFnZSB2YWx1ZSB0byBjb21wYXJlCistciwgLS1yb3VuZHM8aW50PiAgICAgICAgICAgICAgIGxvYWQvc2xlZXAgcm91bmRzCistZiwgLS1maWxlPTxjb25maWdmaWxlPiAgICAgICAgIGNvbmZpZyBmaWxlIHRvIHVzZQorLW8sIC0tb3V0cHV0PTxkaXI+ICAgICAgICAgICAgICBvdXRwdXQgZGlyLCBtdXN0IGV4aXN0CistdiwgLS12ZXJib3NlICAgICAgICAgICAgICAgICAgIHZlcmJvc2Ugb3V0cHV0IG9uL29mZgorCitEdWUgdG8gdGhlIGhpZ2ggcHJpb3JpdHksIHRoZSBhcHBsaWNhdGlvbiBtYXkgbm90IGJlIHJlc3BvbnNpYmxlIGZvciBzb21lIHRpbWUuCitBZnRlciB0aGUgYmVuY2htYXJrLCB0aGUgbG9nZmlsZSBpcyBzYXZlZCBpbiBPVVRQVVRESVIvYmVuY2htYXJrX1RJTUVTVEFNUC5sb2cKKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvYmVuY2htYXJrLmMgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9iZW5jaG1hcmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTM4NjMzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvYmVuY2htYXJrLmMKQEAgLTAsMCArMSwxODQgQEAKKy8qICBjcHVmcmVxLWJlbmNoIENQVUZyZXEgbWljcm9iZW5jaG1hcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBLb3JuYWNrZXIgPGNrb3JuYWNrZXJAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAic3lzdGVtLmgiCisjaW5jbHVkZSAiYmVuY2htYXJrLmgiCisKKy8qIFByaW50IG91dCBwcm9ncmVzcyBpZiB3ZSBsb2cgaW50byBhIGZpbGUgKi8KKyNkZWZpbmUgc2hvd19wcm9ncmVzcyh0b3RhbF90aW1lLCBwcm9ncmVzc190aW1lKQlcCitpZiAoY29uZmlnLT5vdXRwdXQgIT0gc3Rkb3V0KSB7CQkJCVwKKwlmcHJpbnRmKHN0ZG91dCwgIlByb2dyZXNzOiAlMDJsdSAlJVxyIiwJCVwKKwkJKHByb2dyZXNzX3RpbWUgKiAxMDApIC8gdG90YWxfdGltZSk7CVwKKwlmZmx1c2goc3Rkb3V0KTsJCQkJCVwKK30KKworLyoqCisgKiBjb21wdXRlIGhvdyBtYW55IHJvdW5kcyBvZiBjYWxjdWxhdGlvbiB3ZSBzaG91bGQgZG8KKyAqIHRvIGdldCB0aGUgZ2l2ZW4gbG9hZCB0aW1lCisgKgorICogQHBhcmFtIGxvYWQgYWltZWQgbG9hZCB0aW1lIGluILVzCisgKgorICogQHJldHZhbCByb3VuZHMgb2YgY2FsY3VsYXRpb24KKyAqKi8KKwordW5zaWduZWQgaW50IGNhbGN1bGF0ZV90aW1lc3BhY2UobG9uZyBsb2FkLCBzdHJ1Y3QgY29uZmlnICpjb25maWcpCit7CisJaW50IGk7CisJbG9uZyBsb25nIG5vdywgdGhlbjsKKwl1bnNpZ25lZCBpbnQgZXN0aW1hdGVkID0gR0FVR0VDT1VOVDsKKwl1bnNpZ25lZCBpbnQgcm91bmRzID0gMDsKKwl1bnNpZ25lZCBpbnQgdGltZWQgPSAwOworCisJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJcHJpbnRmKCJjYWxpYnJhdGluZyBsb2FkIG9mICVsaXVzLCBwbGVhc2Ugd2FpdC4uLlxuIiwgbG9hZCk7CisKKwkvKiBnZXQgdGhlIGluaXRpYWwgY2FsY3VsYXRpb24gdGltZSBmb3IgYSBzcGVjaWZpYyBudW1iZXIgb2Ygcm91bmRzICovCisJbm93ID0gZ2V0X3RpbWUoKTsKKwlST1VORFMoZXN0aW1hdGVkKTsKKwl0aGVuID0gZ2V0X3RpbWUoKTsKKworCXRpbWVkID0gKHVuc2lnbmVkIGludCkodGhlbiAtIG5vdyk7CisKKwkvKiBhcHByb3hpbWF0aW9uIG9mIHRoZSB3YW50ZWQgbG9hZCB0aW1lIGJ5IGNvbXBhcmluZyB3aXRoIHRoZQorCSAqIGluaXRpYWwgY2FsY3VsYXRpb24gdGltZSAqLyAKKwlmb3IgKGk9IDA7IGkgPCA0OyBpKyspCisJeworCQlyb3VuZHMgPSAodW5zaWduZWQgaW50KShsb2FkICogZXN0aW1hdGVkIC8gdGltZWQpOworCQlkcHJpbnRmKCJjYWxpYnJhdGluZyB3aXRoICV1IHJvdW5kc1xuIiwgcm91bmRzKTsKKwkJbm93ID0gZ2V0X3RpbWUoKTsKKwkJUk9VTkRTKHJvdW5kcyk7CisJCXRoZW4gPSBnZXRfdGltZSgpOworCisJCXRpbWVkID0gKHVuc2lnbmVkIGludCkodGhlbiAtIG5vdyk7CisJCWVzdGltYXRlZCA9IHJvdW5kczsKKwl9CisJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJcHJpbnRmKCJjYWxpYnJhdGlvbiBkb25lXG4iKTsKKworCXJldHVybiBlc3RpbWF0ZWQ7Cit9CisKKy8qKgorICogYmVuY2htYXJrCisgKiBnZW5lcmF0ZXMgYSBzcGVjaWZpYyBzbGVlcCBhbiBsb2FkIHRpbWUgd2l0aCB0aGUgcGVyZm9ybWFuY2UKKyAqIGdvdmVybm9yIGFuZCBjb21wYXJlcyB0aGUgdXNlZCB0aW1lIGZvciBzYW1lIGNhbGN1bGF0aW9ucyBkb25lCisgKiB3aXRoIHRoZSBjb25maWd1cmVkIHBvd2Vyc2F2ZSBnb3Zlcm5vcgorICoKKyAqIEBwYXJhbSBjb25maWcgY29uZmlnIHZhbHVlcyBmb3IgdGhlIGJlbmNobWFyaworICoKKyAqKi8KKwordm9pZCBzdGFydF9iZW5jaG1hcmsoc3RydWN0IGNvbmZpZyAqY29uZmlnKQoreworCXVuc2lnbmVkIGludCBfcm91bmQsIGN5Y2xlOworCWxvbmcgbG9uZyBub3csIHRoZW47CisJbG9uZyBzbGVlcF90aW1lID0gMCwgbG9hZF90aW1lID0gMDsKKwlsb25nIHBlcmZvcm1hbmNlX3RpbWUgPSAwLCBwb3dlcnNhdmVfdGltZSA9IDA7CisJdW5zaWduZWQgaW50IGNhbGN1bGF0aW9uczsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3RpbWUgPSAwLCBwcm9ncmVzc190aW1lID0gMDsKKworCXNsZWVwX3RpbWUgPSBjb25maWctPnNsZWVwOworCWxvYWRfdGltZSA9IGNvbmZpZy0+bG9hZDsKKworCS8qIEZvciB0aGUgcHJvZ3Jlc3MgYmFyICovCisJZm9yIChfcm91bmQ9MTsgX3JvdW5kIDw9IGNvbmZpZy0+cm91bmRzOyBfcm91bmQrKykKKwkJdG90YWxfdGltZSArPSBfcm91bmQgKiAoY29uZmlnLT5zbGVlcCArIGNvbmZpZy0+bG9hZCk7CisJdG90YWxfdGltZSAqPSAyOyAvKiBwb3dlcnNhdmUgYW5kIHBlcmZvcm1hbmNlIGN5Y2xlcyAqLworCisJZm9yIChfcm91bmQ9MDsgX3JvdW5kIDwgY29uZmlnLT5yb3VuZHM7IF9yb3VuZCsrKSB7CisJCXBlcmZvcm1hbmNlX3RpbWUgPSAwTEw7CisJCXBvd2Vyc2F2ZV90aW1lID0gMExMOworCisJCXNob3dfcHJvZ3Jlc3ModG90YWxfdGltZSwgcHJvZ3Jlc3NfdGltZSk7CisKKwkJLyogc2V0IHRoZSBjcHVmcmVxIGdvdmVybm9yIHRvICJwZXJmb3JtYW5jZSIgd2hpY2ggZGlzYWJsZXMKKwkJICogUC1TdGF0ZSBzd2l0Y2hpbmcuICovCisJCWlmIChzZXRfY3B1ZnJlcV9nb3Zlcm5vcigicGVyZm9ybWFuY2UiLCBjb25maWctPmNwdSkgIT0gMCkKKwkJCXJldHVybjsKKworCQkvKiBjYWxpYnJhdGUgdGhlIGNhbGN1bGF0aW9uIHRpbWUuIHRoZSByZXN1bHRpbmcgY2FsY3VsYXRpb24KKwkJICogX3JvdW5kcyBzaG91bGQgcHJvZHVjZSBhIGxvYWQgd2hpY2ggbWF0Y2hlcyB0aGUgY29uZmlndXJlZAorCQkgKiBsb2FkIHRpbWUgKi8KKwkJY2FsY3VsYXRpb25zID0gY2FsY3VsYXRlX3RpbWVzcGFjZShsb2FkX3RpbWUsIGNvbmZpZyk7CisKKwkJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJCXByaW50ZigiX3JvdW5kICVpOiBkb2luZyAldSBjeWNsZXMgd2l0aCAldSBjYWxjdWxhdGlvbnMiCisJCQkgICAgICAgIiBmb3IgJWxpdXNcbiIsIF9yb3VuZCArIDEsIGNvbmZpZy0+Y3ljbGVzLAorCQkJICAgICAgIGNhbGN1bGF0aW9ucywgbG9hZF90aW1lKTsKKworCQlmcHJpbnRmKGNvbmZpZy0+b3V0cHV0LCAiJXUgJWxpICVsaSAiLAorCQkJX3JvdW5kLCBsb2FkX3RpbWUsIHNsZWVwX3RpbWUpOworCisJCWlmIChjb25maWctPnZlcmJvc2UpIHsKKwkJCXByaW50ZigiYXZhcmFnZTogJWxpdXMsIHJwczolbGlcbiIsIGxvYWRfdGltZSAvIGNhbGN1bGF0aW9ucywgMTAwMDAwMCAqIGNhbGN1bGF0aW9ucyAvIGxvYWRfdGltZSk7CisJCX0KKworCQkvKiBkbyBzb21lIHNsZWVwL2xvYWQgY3ljbGVzIHdpdGggdGhlIHBlcmZvcm1hbmNlIGdvdmVybm9yICovCisJCWZvciAoY3ljbGUgPSAwOyBjeWNsZSA8IGNvbmZpZy0+Y3ljbGVzOyBjeWNsZSsrKSB7CisJCQlub3cgPSBnZXRfdGltZSgpOworCQkJdXNsZWVwKHNsZWVwX3RpbWUpOworCQkJUk9VTkRTKGNhbGN1bGF0aW9ucyk7CisJCQl0aGVuID0gZ2V0X3RpbWUoKTsKKwkJCXBlcmZvcm1hbmNlX3RpbWUgKz0gdGhlbiAtIG5vdyAtIHNsZWVwX3RpbWU7CisJCQlpZiAoY29uZmlnLT52ZXJib3NlKQorCQkJCXByaW50ZigicGVyZm9ybWFuY2UgY3ljbGUgdG9vayAlbGl1cywgc2xlZXA6ICVsaXVzLCBsb2FkOiAlbGl1cywgcm91bmRzOiAldVxuIiwKKwkJCQkJKGxvbmcpKHRoZW4gLSBub3cpLCBzbGVlcF90aW1lLCBsb2FkX3RpbWUsIGNhbGN1bGF0aW9ucyk7CisJCX0KKwkJZnByaW50Zihjb25maWctPm91dHB1dCwgIiVsaSAiLCBwZXJmb3JtYW5jZV90aW1lIC8gY29uZmlnLT5jeWNsZXMpOworCisJCXByb2dyZXNzX3RpbWUgKz0gc2xlZXBfdGltZSArIGxvYWRfdGltZTsKKwkJc2hvd19wcm9ncmVzcyh0b3RhbF90aW1lLCBwcm9ncmVzc190aW1lKTsKKworCQkvKiBzZXQgdGhlIHBvd2Vyc2F2ZSBnb3Zlcm5vciB3aGljaCBhY3RpdmF0ZXMgUC1TdGF0ZSBzd2l0Y2hpbmcKKwkJICogYWdhaW4gKi8KKwkJaWYgKHNldF9jcHVmcmVxX2dvdmVybm9yKGNvbmZpZy0+Z292ZXJub3IsIGNvbmZpZy0+Y3B1KSAhPSAwKQorCQkJcmV0dXJuOworCisJCS8qIGFnYWluLCBkbyBzb21lIHNsZWVwL2xvYWQgY3ljbGVzIHdpdGggdGhlIHBvd2Vyc2F2ZSBnb3Zlcm5vciAqLworCQlmb3IgKGN5Y2xlID0gMDsgY3ljbGUgPCBjb25maWctPmN5Y2xlczsgY3ljbGUrKykgeworCQkJbm93ID0gZ2V0X3RpbWUoKTsKKwkJCXVzbGVlcChzbGVlcF90aW1lKTsKKwkJCVJPVU5EUyhjYWxjdWxhdGlvbnMpOworCQkJdGhlbiA9IGdldF90aW1lKCk7CisJCQlwb3dlcnNhdmVfdGltZSArPSB0aGVuIC0gbm93IC0gc2xlZXBfdGltZTsKKwkJCWlmIChjb25maWctPnZlcmJvc2UpCisJCQkJcHJpbnRmKCJwb3dlcnNhdmUgY3ljbGUgdG9vayAlbGl1cywgc2xlZXA6ICVsaXVzLCBsb2FkOiAlbGl1cywgcm91bmRzOiAldVxuIiwKKwkJCQkJKGxvbmcpKHRoZW4gLSBub3cpLCBzbGVlcF90aW1lLCBsb2FkX3RpbWUsIGNhbGN1bGF0aW9ucyk7CisJCX0KKworCQlwcm9ncmVzc190aW1lICs9IHNsZWVwX3RpbWUgKyBsb2FkX3RpbWU7CisKKwkJLyogY29tcGFyZSB0aGUgYXZhcmFnZSBzbGVlcC9sb2FkIGN5Y2xlcyAgKi8KKwkJZnByaW50Zihjb25maWctPm91dHB1dCwgIiVsaSAiLCBwb3dlcnNhdmVfdGltZSAvIGNvbmZpZy0+Y3ljbGVzKTsKKwkJZnByaW50Zihjb25maWctPm91dHB1dCwgIiUuM2ZcbiIsIHBlcmZvcm1hbmNlX3RpbWUgKiAxMDAuMCAvIHBvd2Vyc2F2ZV90aW1lKTsKKwkJZmZsdXNoKGNvbmZpZy0+b3V0cHV0KTsKKworCQlpZiAoY29uZmlnLT52ZXJib3NlKQorCQkJcHJpbnRmKCJwZXJmb3JtYW5jZSBpcyBhdCAlLjJmJSVcbiIsIHBlcmZvcm1hbmNlX3RpbWUgKiAxMDAuMCAvIHBvd2Vyc2F2ZV90aW1lKTsKKworCQlzbGVlcF90aW1lICs9IGNvbmZpZy0+c2xlZXBfc3RlcDsKKwkJbG9hZF90aW1lICs9IGNvbmZpZy0+bG9hZF9zdGVwOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvYmVuY2htYXJrLmggYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9iZW5jaG1hcmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjkxZjkxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvYmVuY2htYXJrLmgKQEAgLTAsMCArMSwyNyBAQAorLyogIGNwdWZyZXEtYmVuY2ggQ1BVRnJlcSBtaWNyb2JlbmNobWFyaworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0aWFuIEtvcm5hY2tlciA8Y2tvcm5hY2tlckBzdXNlLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKiBsb2FkIGxvb3AsIHRoaXMgc2Nob3VsZCB0YWtlIGFib3V0IDEgdG8gMm1zIHRvIGNvbXBsZXRlICovCisjZGVmaW5lIFJPVU5EUyh4KSB7dW5zaWduZWQgaW50IHJjbnQ7CQkJICAgICAgIFwKKwkJZm9yIChyY250ID0gMDsgcmNudDwgeCoxMDAwOyByY250KyspIHsgXAorCQkJKHZvaWQpKCgoaW50KShwb3cocmNudCwgcmNudCkgKiBzcXJ0KHJjbnQqNzIzMDk3MCkpIF4gNzIzMDcxNikgXiAoaW50KWF0YW4yKHJjbnQsIHJjbnQpKTsgXAorCQl9fQkJCQkJCQlcCisKKwordm9pZCBzdGFydF9iZW5jaG1hcmsoc3RydWN0IGNvbmZpZyAqY29uZmlnKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2NvbmZpZy5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY5MGYxYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2NvbmZpZy5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qICBjcHVmcmVxLWJlbmNoIENQVUZyZXEgbWljcm9iZW5jaG1hcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBLb3JuYWNrZXIgPGNrb3JuYWNrZXJAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyogaW5pdGlhbCBsb29wIGNvdW50IGZvciB0aGUgbG9hZCBjYWxpYnJhdGlvbiAqLworI2RlZmluZSBHQVVHRUNPVU5UCTE1MDAKKworLyogZGVmYXVsdCBzY2hlZHVsaW5nIHBvbGljeSBTQ0hFRF9PVEhFUiAqLworI2RlZmluZSBTQ0hFRFVMRVIJU0NIRURfT1RIRVIKKworI2RlZmluZSBQUklPUklUWV9ERUZBVUxUIDAKKyNkZWZpbmUgUFJJT1JJVFlfSElHSAkgc2NoZWRfZ2V0X3ByaW9yaXR5X21heChTQ0hFRFVMRVIpCisjZGVmaW5lIFBSSU9SSVRZX0xPVwkgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbihTQ0hFRFVMRVIpCisKKy8qIGVuYWJsZSBmdXJ0aGVyIGRlYnVnIG1lc3NhZ2VzICovCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgZHByaW50ZiBwcmludGYKKyNlbHNlCisjZGVmaW5lIGRwcmludGYoIC4uLiApIHdoaWxlKDApIHsgfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2NwdWZyZXEtYmVuY2hfcGxvdC5zaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2NwdWZyZXEtYmVuY2hfcGxvdC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTAwMjFhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvY3B1ZnJlcS1iZW5jaF9wbG90LnNoCkBAIC0wLDAgKzEsMTA0IEBACisjIS9iaW4vYmFzaAorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KKworIyBBdXRob3IvQ29weXJpZ2h0KGMpOiAyMDA5LCBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKworIyBIZWxwZXIgc2NyaXB0IHRvIGVhc2lseSBjcmVhdGUgbmljZSBwbG90cyBvZiB5b3VyIGNwdWZyZXEtYmVuY2ggcmVzdWx0cworCitkaXI9YG1rdGVtcCAtZGAKK291dHB1dF9maWxlPSJjcHVmcmVxLWJlbmNoLnBuZyIKK2dsb2JhbF90aXRsZT0iY3B1ZnJlcS1iZW5jaCBwbG90IgorcGljdHVyZV90eXBlPSJqcGVnIgorZmlsZVswXT0iIgorCitmdW5jdGlvbiB1c2FnZSgpCit7CisgICAgZWNobyAiY3B1ZnJlcS1iZW5jaF9wbG90LnNoIFtPUFRJT05TXSBsb2dmaWxlIFttZWFzdXJlX3RpdGxlXSBbbG9nZmlsZSBbbWVhc3VyZV90aXRsZV1dIC4uLl0iCisgICAgZWNobworICAgIGVjaG8gIk9wdGlvbnMiCisgICAgZWNobyAiICAgLW8gb3V0cHV0X2ZpbGUiCisgICAgZWNobyAiICAgLXQgZ2xvYmFsX3RpdGxlIgorICAgIGVjaG8gIiAgIC1wIHBpY3R1cmVfdHlwZSBbanBlZ3xnaWZ8cG5nfHBvc3RzY3JpcHR8Li4uXSIKKyAgICBleGl0IDEKK30KKworaWYgWyAkIyAtZXEgMCBdO3RoZW4KKwllY2hvICJObyBiZW5jaG1hcmsgcmVzdWx0cyBmaWxlIHByb3ZpZGVkIgorCWVjaG8KKwl1c2FnZQorZmkKKword2hpbGUgZ2V0b3B0cyBvOnQ6cDogbmFtZSA7IGRvCisgICAgY2FzZSAkbmFtZSBpbgorCW8pCisJICAgIG91dHB1dF9maWxlPSIkT1BUQVJHIi4kcGljdHVyZV90eXBlCisJICAgIDs7CisJdCkKKwkgICAgZ2xvYmFsX3RpdGxlPSIkT1BUQVJHIgorCSAgICA7OworCXApCisJICAgIHBpY3R1cmVfdHlwZT0iJE9QVEFSRyIKKwkgICAgOzsKKyAgICAgICAgPykKKwkgICAgdXNhZ2UKKwkgICAgOzsKKyAgICBlc2FjCitkb25lCitzaGlmdCAkKCgkT1BUSU5EIC0xKSkKKworcGxvdHM9MAord2hpbGUgWyAiJDEiIF07ZG8KKyAgICBpZiBbICEgLWYgIiQxIiBdO3RoZW4KKwllY2hvICJGaWxlICQxIGRvZXMgbm90IGV4aXN0IgorCXVzYWdlCisgICAgZmkKKyAgICBmaWxlWyRwbG90c109IiQxIgorICAgIHRpdGxlWyRwbG90c109IiQyIgorICAgICMgZWNobyAiRmlsZTogJHtmaWxlWyRwbG90c119IC0gJHt0aXRsZVtwbG90c119IgorICAgIHNoaWZ0O3NoaWZ0CisgICAgcGxvdHM9JCgocGxvdHMgKyAxKSkKK2RvbmUKKworZWNobyAic2V0IHRlcm1pbmFsICRwaWN0dXJlX3R5cGUiCT4+ICRkaXIvcGxvdF9zY3JpcHQuZ3BsCitlY2hvICJzZXQgb3V0cHV0IFwiJG91dHB1dF9maWxlXCIiCT4+ICRkaXIvcGxvdF9zY3JpcHQuZ3BsCitlY2hvICJzZXQgdGl0bGUgXCIkZ2xvYmFsX3RpdGxlXCIiCT4+ICRkaXIvcGxvdF9zY3JpcHQuZ3BsCitlY2hvICJzZXQgeGxhYmVsIFwic2xlZXAvbG9hZCB0aW1lXCIiCT4+ICRkaXIvcGxvdF9zY3JpcHQuZ3BsCitlY2hvICJzZXQgeWxhYmVsIFwiUGVyZm9ybWFuY2UgKCUpXCIiCT4+ICRkaXIvcGxvdF9zY3JpcHQuZ3BsCisKK2ZvcigocGxvdD0wO3Bsb3Q8JHBsb3RzO3Bsb3QrKykpO2RvCisKKyAgICAjIFNhbml0eSBjaGVjaworICAgICMjIyMjIyBJIGFtIHRvIGR1bXAgdG8gZ2V0IHRoaXMgcmVkaXJlY3RlZCB0byBzdGRlcnIvc3Rkb3V0IGluIG9uZSBhd2sgY2FsbC4uLiAjIyMjIworICAgIGNhdCAke2ZpbGVbJHBsb3RdfSB8Z3JlcCAtdiAiXiMiIHxhd2sgJ3tpZiAoJDIgIT0gJDMpIHByaW50ZigiRXJyb3IgaW4gbWVhc3VyZSAlZDpMb2FkIHRpbWUgJXMgZG9lcyBub3QgZXF1YWwgc2xlZXAgdGltZSAlcywgcGxvdCB3aWxsIG5vdCBiZSBjb3JyZWN0XG4iLCAkMSwgJDIsICQzKTsgRVJSPTF9JworICAgICMjIyMjIyBJIGFtIHRvIGR1bXAgdG8gZ2V0IHRoaXMgcmVkaXJlY3RlZCBpbiBvbmUgYXdrIGNhbGwuLi4gIyMjIyMKKworICAgICMgUGFyc2Ugb3V0IGxvYWQgdGltZSAod2hpY2ggbXVzdCBiZSBlcXVhbCB0byBzbGVlcCB0aW1lIGZvciBhIHBsb3QpLCBkaXZpZGUgaXQgYnkgMTAwMAorICAgICMgdG8gZ2V0IG1zIGFuZCBwYXJzZSBvdXQgdGhlIHBlcmZvcm1hbmNlIGluIHBlcmNlbnRhZ2UgYW5kIHdyaXRlIGl0IHRvIGEgdGVtcCBmaWxlIGZvciBwbG90dGluZworICAgIGNhdCAke2ZpbGVbJHBsb3RdfSB8Z3JlcCAtdiAiXiMiIHxhd2sgJ3twcmludGYgIiVsdSAlLjFmXG4iLCQyLzEwMDAsICQ2fScgPiRkaXIvZGF0YV8kcGxvdAorCisgICAgaWYgWyAkcGxvdCAtZXEgMCBdO3RoZW4KKwllY2hvIC1uICJwbG90ICIgPj4gJGRpci9wbG90X3NjcmlwdC5ncGwKKyAgICBmaQorICAgIGVjaG8gLW4gIlwiJGRpci9kYXRhXyRwbG90XCIgdGl0bGUgXCIke3RpdGxlWyRwbG90XX1cIiB3aXRoIGxpbmVzIiA+PiAkZGlyL3Bsb3Rfc2NyaXB0LmdwbAorICAgIGlmIFsgJCgoJHBsb3QgKyAxKSkgLW5lICRwbG90cyBdO3RoZW4KKwllY2hvIC1uICIsICIgPj4gJGRpci9wbG90X3NjcmlwdC5ncGwKKyAgICBmaQorZG9uZQorZWNobyA+PiAkZGlyL3Bsb3Rfc2NyaXB0LmdwbAorCitnbnVwbG90ICRkaXIvcGxvdF9zY3JpcHQuZ3BsCitybSAtciAkZGlyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvY3B1ZnJlcS1iZW5jaF9zY3JpcHQuc2ggYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9jcHVmcmVxLWJlbmNoX3NjcmlwdC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTIwZDJhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvY3B1ZnJlcS1iZW5jaF9zY3JpcHQuc2gKQEAgLTAsMCArMSwxMDEgQEAKKyMhL2Jpbi9iYXNoCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgorCisjIEF1dGhvci9Db3B5cmlnaHQoYyk6IDIwMDksIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorCisjIE9uZGVtYW5kIHVwX3RocmVzaG9sZCBhbmQgc2FtcGxpbmcgcmF0ZSB0ZXN0IHNjcmlwdCBmb3IgY3B1ZnJlcS1iZW5jaAorIyBtaXJjb2JlbmNobWFyay4KKyMgTW9kaWZ5IHRoZSBnZW5lcmFsIHZhcmlhYmxlcyBhdCB0aGUgdG9wIG9yIGV4dGVuZCBvciBjb3B5IG91dCBwYXJ0cworIyBpZiB5b3Ugd2FudCB0byB0ZXN0IG90aGVyIHRoaW5ncworIworCisjIERlZmF1bHQgd2l0aCBsYXRlc3Qga2VybmVscyBpcyA5NSwgYmVmb3JlIG1pY3JvIGFjY291bnQgcGF0Y2hlcworIyBpdCB3YXMgODAsIGNtcC4gd2l0aCBnaXQgY29tbWl0IDgwODAwOTEzMTA0NmI2MmFjNDM0ZGJjNzk2CitVUF9USFJFU0hPTEQ9IjYwIDgwIDk1IgorIyBEZXBlbmRpbmcgb24gdGhlIGtlcm5lbCBhbmQgdGhlIEhXIHNhbXBsaW5nIHJhdGUgY291bGQgYmUgcmVzdHJpY3RlZAorIyBhbmQgY2Fubm90IGJlIHNldCB0aGF0IGxvdy4uLgorIyBFLmcuIGJlZm9yZSBnaXQgY29tbWl0IGNlZjk2MTVhODUzZWJjNDk3MjA4NGY3IG9uZSBjb3VsZCBvbmx5IHNldAorIyBtaW4gc2FtcGxpbmcgcmF0ZSBvZiA4MDAwMCBpZiBDT05GSUdfSFo9MjUwCitTQU1QTElOR19SQVRFPSIyMDAwMCA4MDAwMCIKKworZnVuY3Rpb24gbWVhc3VyZSgpCit7CisgICAgbG9jYWwgLWkgdXBfdGhyZXNob2xkX3NldAorICAgIGxvY2FsIC1pIHNhbXBsaW5nX3JhdGVfc2V0CisKKyAgICBmb3IgdXBfdGhyZXNob2xkIGluICRVUF9USFJFU0hPTEQ7ZG8KKwlmb3Igc2FtcGxpbmdfcmF0ZSBpbiAkU0FNUExJTkdfUkFURTtkbworCSAgICAjIFNldCB2YWx1ZXMgaW4gc3lzZnMKKwkgICAgZWNobyAkdXBfdGhyZXNob2xkID4vc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL2NwdWZyZXEvb25kZW1hbmQvdXBfdGhyZXNob2xkCisJICAgIGVjaG8gJHNhbXBsaW5nX3JhdGUgPi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9vbmRlbWFuZC9zYW1wbGluZ19yYXRlCisJICAgIHVwX3RocmVzaG9sZF9zZXQ9JChjYXQgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jcHVmcmVxL29uZGVtYW5kL3VwX3RocmVzaG9sZCkKKwkgICAgc2FtcGxpbmdfcmF0ZV9zZXQ9JChjYXQgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jcHVmcmVxL29uZGVtYW5kL3NhbXBsaW5nX3JhdGUpCisKKwkgICAgIyBWZXJpZnkgc2V0IHZhbHVlcyBpbiBzeXNmcworCSAgICBpZiBbICR7dXBfdGhyZXNob2xkX3NldH0gLWVxICR7dXBfdGhyZXNob2xkfSBdO3RoZW4KKwkJZWNobyAidXBfdGhyZXNob2xkOiAkdXBfdGhyZXNob2xkLCBzZXQgaW4gc3lzZnM6ICR7dXBfdGhyZXNob2xkX3NldH0iCisJICAgIGVsc2UKKwkJZWNobyAiV0FSTklORzogVHJpZWQgdG8gc2V0IHVwX3RocmVzaG9sZDogJHVwX3RocmVzaG9sZCwgc2V0IGluIHN5c2ZzOiAke3VwX3RocmVzaG9sZF9zZXR9IgorCSAgICBmaQorCSAgICBpZiBbICR7c2FtcGxpbmdfcmF0ZV9zZXR9IC1lcSAke3NhbXBsaW5nX3JhdGV9IF07dGhlbgorCQllY2hvICJzYW1wbGluZ19yYXRlOiAkc2FtcGxpbmdfcmF0ZSwgc2V0IGluIHN5c2ZzOiAke3NhbXBsaW5nX3JhdGVfc2V0fSIKKwkgICAgZWxzZQorCQllY2hvICJXQVJOSU5HOiBUcmllZCB0byBzZXQgc2FtcGxpbmdfcmF0ZTogJHNhbXBsaW5nX3JhdGUsIHNldCBpbiBzeXNmczogJHtzYW1wbGluZ19yYXRlX3NldH0iCisJICAgIGZpCisKKwkgICAgIyBCZW5jaG1hcmsKKwkgICAgY3B1ZnJlcS1iZW5jaCAtbyAvdmFyL2xvZy9jcHVmcmVxLWJlbmNoL3VwX3RocmVzaG9sZF8ke3VwX3RocmVzaG9sZH1fc2FtcGxpbmdfcmF0ZV8ke3NhbXBsaW5nX3JhdGV9CisJZG9uZQorICAgIGRvbmUKK30KKworZnVuY3Rpb24gY3JlYXRlX3Bsb3RzKCkKK3sKKyAgICBsb2NhbCBjb21tYW5kCisKKyAgICBmb3IgdXBfdGhyZXNob2xkIGluICRVUF9USFJFU0hPTEQ7ZG8KKwljb21tYW5kPSJjcHVmcmVxLWJlbmNoX3Bsb3Quc2ggLW8gXCJzYW1wbGluZ19yYXRlXyR7U0FNUExJTkdfUkFURX1fdXBfdGhyZXNob2xkXyR7dXBfdGhyZXNob2xkfVwiIC10IFwiT25kZW1hbmQgc2FtcGxpbmdfcmF0ZTogJHtTQU1QTElOR19SQVRFfSBjb21wYXJpc29uIC0gVXBfdGhyZXNob2xkOiAkdXBfdGhyZXNob2xkICVcIiIKKwlmb3Igc2FtcGxpbmdfcmF0ZSBpbiAkU0FNUExJTkdfUkFURTtkbworCSAgICBjb21tYW5kPSIke2NvbW1hbmR9IC92YXIvbG9nL2NwdWZyZXEtYmVuY2gvdXBfdGhyZXNob2xkXyR7dXBfdGhyZXNob2xkfV9zYW1wbGluZ19yYXRlXyR7c2FtcGxpbmdfcmF0ZX0vKiBcInNhbXBsaW5nX3JhdGUgPSAkc2FtcGxpbmdfcmF0ZVwiIgorCWRvbmUKKwllY2hvICRjb21tYW5kCisJZXZhbCAiJGNvbW1hbmQiCisJZWNobworICAgIGRvbmUKKworICAgIGZvciBzYW1wbGluZ19yYXRlIGluICRTQU1QTElOR19SQVRFO2RvCisJY29tbWFuZD0iY3B1ZnJlcS1iZW5jaF9wbG90LnNoIC1vIFwidXBfdGhyZXNob2xkXyR7VVBfVEhSRVNIT0xEfV9zYW1wbGluZ19yYXRlXyR7c2FtcGxpbmdfcmF0ZX1cIiAtdCBcIk9uZGVtYW5kIHVwX3RocmVzaG9sZDogJHtVUF9USFJFU0hPTER9ICUgY29tcGFyaXNvbiAtIHNhbXBsaW5nX3JhdGU6ICRzYW1wbGluZ19yYXRlXCIiCisJZm9yIHVwX3RocmVzaG9sZCBpbiAkVVBfVEhSRVNIT0xEO2RvCisJICAgIGNvbW1hbmQ9IiR7Y29tbWFuZH0gL3Zhci9sb2cvY3B1ZnJlcS1iZW5jaC91cF90aHJlc2hvbGRfJHt1cF90aHJlc2hvbGR9X3NhbXBsaW5nX3JhdGVfJHtzYW1wbGluZ19yYXRlfS8qIFwidXBfdGhyZXNob2xkID0gJHVwX3RocmVzaG9sZFwiIgorCWRvbmUKKwllY2hvICRjb21tYW5kCisJZXZhbCAiJGNvbW1hbmQiCisJZWNobworICAgIGRvbmUKKworICAgIGNvbW1hbmQ9ImNwdWZyZXEtYmVuY2hfcGxvdC5zaCAtbyBcInVwX3RocmVzaG9sZF8ke1VQX1RIUkVTSE9MRH1fc2FtcGxpbmdfcmF0ZV8ke1NBTVBMSU5HX1JBVEV9XCIgLXQgXCJPbmRlbWFuZCB1cF90aHJlc2hvbGQ6ICR7VVBfVEhSRVNIT0xEfSBhbmQgc2FtcGxpbmdfcmF0ZSAke1NBTVBMSU5HX1JBVEV9IGNvbXBhcmlzb25cIiIKKyAgICBmb3Igc2FtcGxpbmdfcmF0ZSBpbiAkU0FNUExJTkdfUkFURTtkbworCWZvciB1cF90aHJlc2hvbGQgaW4gJFVQX1RIUkVTSE9MRDtkbworCSAgICBjb21tYW5kPSIke2NvbW1hbmR9IC92YXIvbG9nL2NwdWZyZXEtYmVuY2gvdXBfdGhyZXNob2xkXyR7dXBfdGhyZXNob2xkfV9zYW1wbGluZ19yYXRlXyR7c2FtcGxpbmdfcmF0ZX0vKiBcInVwX3RocmVzaG9sZCA9ICR1cF90aHJlc2hvbGQgLSBzYW1wbGluZ19yYXRlID0gJHNhbXBsaW5nX3JhdGVcIiIKKwlkb25lCisgICAgZG9uZQorICAgIGVjaG8gIiRjb21tYW5kIgorICAgIGV2YWwgIiRjb21tYW5kIgorfQorCittZWFzdXJlCitjcmVhdGVfcGxvdHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9leGFtcGxlLmNmZyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2V4YW1wbGUuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MWY2NDMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9leGFtcGxlLmNmZwpAQCAtMCwwICsxLDExIEBACitzbGVlcCA9IDUwMDAwCitsb2FkID0gNTAwMDAKK2NwdSA9IDAKK3ByaW9yaXR5ID0gTE9XCitvdXRwdXQgPSAvdmFyL2xvZy9jcHVmcmVxLWJlbmNoCitzbGVlcF9zdGVwID0gNTAwMDAKK2xvYWRfc3RlcCA9IDUwMDAwCitjeWNsZXMgPSAyMAorcm91bmRzID0gNDAKK3ZlcmJvc2UgPSAwCitnb3Zlcm5vciA9IG9uZGVtYW5kCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9tYWluLmMgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5NTNmYwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL21haW4uYwpAQCAtMCwwICsxLDIwMyBAQAorLyogIGNwdWZyZXEtYmVuY2ggQ1BVRnJlcSBtaWNyb2JlbmNobWFyaworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0aWFuIEtvcm5hY2tlciA8Y2tvcm5hY2tlckBzdXNlLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAic3lzdGVtLmgiCisjaW5jbHVkZSAiYmVuY2htYXJrLmgiCisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0KK3sKKwl7Im91dHB1dCIsCTEsCTAsCSdvJ30sCisJeyJzbGVlcCIsCTEsCTAsCSdzJ30sCisJeyJsb2FkIiwJMSwJMCwJJ2wnfSwKKwl7InZlcmJvc2UiLAkwLAkwLAkndid9LAorCXsiY3B1IiwJCTEsCTAsCSdjJ30sCisJeyJnb3Zlcm5vciIsCTEsCTAsCSdnJ30sCisJeyJwcmlvIiwJMSwJMCwJJ3AnfSwKKwl7ImZpbGUiLAkxLAkwLAknZid9LAorCXsiY3ljbGVzIiwJMSwJMCwJJ24nfSwKKwl7InJvdW5kcyIsCTEsCTAsCSdyJ30sCisJeyJsb2FkLXN0ZXAiLAkxLAkwLAkneCd9LAorCXsic2xlZXAtc3RlcCIsCTEsCTAsCSd5J30sCisJeyJoZWxwIiwJMCwJMCwJJ2gnfSwKKwl7MCwgMCwgMCwgMH0KK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgdXNhZ2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgdXNhZ2UoKSAKK3sKKwlwcmludGYoInVzYWdlOiAuL2JlbmNoXG4iKTsKKwlwcmludGYoIk9wdGlvbnM6XG4iKTsKKwlwcmludGYoIiAtbCwgLS1sb2FkPTxsb25nIGludD5cdFx0aW5pdGlhbCBsb2FkIHRpbWUgaW4gdXNcbiIpOworCXByaW50ZigiIC1zLCAtLXNsZWVwPTxsb25nIGludD5cdFx0aW5pdGlhbCBzbGVlcCB0aW1lIGluIHVzXG4iKTsKKwlwcmludGYoIiAteCwgLS1sb2FkLXN0ZXA9PGxvbmcgaW50Plx0dGltZSB0byBiZSBhZGRlZCB0byBsb2FkIHRpbWUsIGluIHVzXG4iKTsKKwlwcmludGYoIiAteSwgLS1zbGVlcC1zdGVwPTxsb25nIGludD5cdHRpbWUgdG8gYmUgYWRkZWQgdG8gc2xlZXAgdGltZSwgaW4gdXNcbiIpOworCXByaW50ZigiIC1jLCAtLWNwdT08Y3B1ICM+XHRcdFx0Q1BVIE5yLiB0byB1c2UsIHN0YXJ0aW5nIGF0IDBcbiIpOworCXByaW50ZigiIC1wLCAtLXByaW89PHByaW9yaXR5Plx0XHRcdHNjaGVkdWxlciBwcmlvcml0eSwgSElHSCwgTE9XIG9yIERFRkFVTFRcbiIpOworCXByaW50ZigiIC1nLCAtLWdvdmVybm9yPTxnb3Zlcm5vcj5cdFx0Y3B1ZnJlcSBnb3Zlcm5vciB0byB0ZXN0XG4iKTsKKwlwcmludGYoIiAtbiwgLS1jeWNsZXM9PGludD5cdFx0XHRsb2FkL3NsZWVwIGN5Y2xlc1xuIik7CisJcHJpbnRmKCIgLXIsIC0tcm91bmRzPGludD5cdFx0XHRsb2FkL3NsZWVwIHJvdW5kc1xuIik7CisJcHJpbnRmKCIgLWYsIC0tZmlsZT08Y29uZmlnZmlsZT5cdFx0Y29uZmlnIGZpbGUgdG8gdXNlXG4iKTsKKwlwcmludGYoIiAtbywgLS1vdXRwdXQ9PGRpcj5cdFx0XHRvdXRwdXQgcGF0aC4gRmlsZW5hbWUgd2lsbCBiZSBPVVRQVVRQQVRIL2JlbmNobWFya19USU1FU1RBTVAubG9nXG4iKTsKKwlwcmludGYoIiAtdiwgLS12ZXJib3NlXHRcdFx0XHR2ZXJib3NlIG91dHB1dCBvbi9vZmZcbiIpOworCXByaW50ZigiIC1oLCAtLWhlbHBcdFx0XHRcdFByaW50IHRoaXMgaGVscCBzY3JlZW5cbiIpOworCWV4aXQgKDEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIG1haW4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgYzsKKwlpbnQgb3B0aW9uX2luZGV4ID0gMDsKKwlzdHJ1Y3QgY29uZmlnICpjb25maWcgPSBOVUxMOworCisJY29uZmlnID0gcHJlcGFyZV9kZWZhdWx0X2NvbmZpZygpOworCisJaWYgKGNvbmZpZyA9PSBOVUxMKQorCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCisJd2hpbGUgKDEpIHsKKwkJYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCAiaGc6bzpzOmw6dmM6cDpmOm46cjp4Onk6IiwKKwkJCQlsb25nX29wdGlvbnMsICZvcHRpb25faW5kZXgpOworCQlpZiAoYyA9PSAtMSkKKwkJCWJyZWFrOworCisJCXN3aXRjaCAoYykgeworCQljYXNlICdvJzoKKwkJCWlmIChjb25maWctPm91dHB1dCAhPSBOVUxMKQorCQkJCWZjbG9zZShjb25maWctPm91dHB1dCk7CisKKwkJCWNvbmZpZy0+b3V0cHV0ID0gcHJlcGFyZV9vdXRwdXQob3B0YXJnKTsKKworCQkJaWYgKGNvbmZpZy0+b3V0cHV0ID09IE5VTEwpCisJCQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKworCQkJZHByaW50ZigidXNlciBvdXRwdXQgcGF0aCAtPiAlc1xuIiwgb3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCXNzY2FuZihvcHRhcmcsICIlbGkiLCAmY29uZmlnLT5zbGVlcCk7CisJCQlkcHJpbnRmKCJ1c2VyIHNsZWVwIHRpbWUgLT4gJXNcbiIsIG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAnbCc6CisJCQlzc2NhbmYob3B0YXJnLCAiJWxpIiwgJmNvbmZpZy0+bG9hZCk7CisJCQlkcHJpbnRmKCJ1c2VyIGxvYWQgdGltZSAtPiAlc1xuIiwgb3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdjJzoKKwkJCXNzY2FuZihvcHRhcmcsICIldSIsICZjb25maWctPmNwdSk7CisJCQlkcHJpbnRmKCJ1c2VyIGNwdSAtPiAlc1xuIiwgb3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdnJzoKKwkJCXN0cm5jcHkoY29uZmlnLT5nb3Zlcm5vciwgb3B0YXJnLCAxNCk7CisJCQlkcHJpbnRmKCJ1c2VyIGdvdmVybm9yIC0+ICVzXG4iLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ3AnOgorCQkJaWYgKHN0cmluZ190b19wcmlvKG9wdGFyZykgIT0gU0NIRURfRVJSKSB7CisJCQkJY29uZmlnLT5wcmlvID0gc3RyaW5nX3RvX3ByaW8ob3B0YXJnKTsKKwkJCQlkcHJpbnRmKCJ1c2VyIHByaW8gLT4gJXNcbiIsIG9wdGFyZyk7CisJCQl9IGVsc2UgeworCQkJCWlmIChjb25maWcgIT0gTlVMTCkgeworCQkJCQlpZiAoY29uZmlnLT5vdXRwdXQgIT0gTlVMTCkKKwkJCQkJCWZjbG9zZShjb25maWctPm91dHB1dCk7CisJCQkJCWZyZWUoY29uZmlnKTsKKwkJCQl9CisJCQkJdXNhZ2UoKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICduJzoKKwkJCXNzY2FuZihvcHRhcmcsICIldSIsICZjb25maWctPmN5Y2xlcyk7CisJCQlkcHJpbnRmKCJ1c2VyIGN5Y2xlcyAtPiAlc1xuIiwgb3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdyJzoKKwkJCXNzY2FuZihvcHRhcmcsICIldSIsICZjb25maWctPnJvdW5kcyk7CisJCQlkcHJpbnRmKCJ1c2VyIHJvdW5kcyAtPiAlc1xuIiwgb3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICd4JzoKKwkJCXNzY2FuZihvcHRhcmcsICIlbGkiLCAmY29uZmlnLT5sb2FkX3N0ZXApOworCQkJZHByaW50ZigidXNlciBsb2FkX3N0ZXAgLT4gJXNcbiIsIG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAneSc6CisJCQlzc2NhbmYob3B0YXJnLCAiJWxpIiwgJmNvbmZpZy0+c2xlZXBfc3RlcCk7CisJCQlkcHJpbnRmKCJ1c2VyIHNsZWVwX3N0ZXAgLT4gJXNcbiIsIG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQlpZiAocHJlcGFyZV9jb25maWcob3B0YXJnLCBjb25maWcpKQorCQkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJCQlicmVhazsKKwkJY2FzZSAndic6CisJCQljb25maWctPnZlcmJvc2UgPSAxOworCQkJZHByaW50ZigidmVyYm9zZSBvdXRwdXQgZW5hYmxlZFxuIik7CisJCQlicmVhazsKKwkJY2FzZSAnaCc6CisJCWNhc2UgJz8nOgorCQlkZWZhdWx0OgorCQkJaWYgKGNvbmZpZyAhPSBOVUxMKSB7CisJCQkJaWYgKGNvbmZpZy0+b3V0cHV0ICE9IE5VTEwpCisJCQkJCWZjbG9zZShjb25maWctPm91dHB1dCk7CisJCQkJZnJlZShjb25maWcpOworCQkJfQorCQkJdXNhZ2UoKTsKKwkJfQorCX0KKworCWlmIChjb25maWctPnZlcmJvc2UpIHsKKwkJcHJpbnRmKCJzdGFydGluZyBiZW5jaG1hcmsgd2l0aCBwYXJhbWV0ZXJzOlxuIik7CisJCXByaW50ZigiY29uZmlnOlxuXHQiCisJCSAgICAgICAic2xlZXA9JWxpXG5cdCIKKwkJICAgICAgICJsb2FkPSVsaVxuXHQiCisJCSAgICAgICAic2xlZXBfc3RlcD0lbGlcblx0IgorCQkgICAgICAgImxvYWRfc3RlcD0lbGlcblx0IgorCQkgICAgICAgImNwdT0ldVxuXHQiCisJCSAgICAgICAiY3ljbGVzPSV1XG5cdCIKKwkJICAgICAgICJyb3VuZHM9JXVcblx0IgorCQkgICAgICAgImdvdmVybm9yPSVzXG5cbiIsCisJCSAgICAgICBjb25maWctPnNsZWVwLAorCQkgICAgICAgY29uZmlnLT5sb2FkLAorCQkgICAgICAgY29uZmlnLT5zbGVlcF9zdGVwLAorCQkgICAgICAgY29uZmlnLT5sb2FkX3N0ZXAsCisJCSAgICAgICBjb25maWctPmNwdSwKKwkJICAgICAgIGNvbmZpZy0+Y3ljbGVzLAorCQkgICAgICAgY29uZmlnLT5yb3VuZHMsCisJCSAgICAgICBjb25maWctPmdvdmVybm9yKTsKKwl9CisKKwlwcmVwYXJlX3VzZXIoY29uZmlnKTsKKwlwcmVwYXJlX3N5c3RlbShjb25maWcpOworCXN0YXJ0X2JlbmNobWFyayhjb25maWcpOworCisJaWYgKGNvbmZpZy0+b3V0cHV0ICE9IHN0ZG91dCkKKwkJZmNsb3NlKGNvbmZpZy0+b3V0cHV0KTsKKworCWZyZWUoY29uZmlnKTsKKworCXJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3BhcnNlLmMgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9wYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMjcwYWMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9wYXJzZS5jCkBAIC0wLDAgKzEsMjI0IEBACisvKiAgY3B1ZnJlcS1iZW5jaCBDUFVGcmVxIG1pY3JvYmVuY2htYXJrCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gS29ybmFja2VyIDxja29ybmFja2VyQHN1c2UuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKworI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgInBhcnNlLmgiCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKy8qKgorICogY29udmVydHMgcHJpb3JpdHkgc3RyaW5nIHRvIHByaW9yaXR5CisgKgorICogQHBhcmFtIHN0ciBzdHJpbmcgdGhhdCByZXByZXNlbnRzIGEgc2NoZWR1bGVyIHByaW9yaXR5CisgKgorICogQHJldHZhbCBwcmlvcml0eQorICogQHJldHZhbCBTQ0hFRF9FUlIgd2hlbiB0aGUgcHJpb3JpdHkgZG9lc24ndCBleGl0CisgKiovCisKK2VudW0gc2NoZWRfcHJpbyBzdHJpbmdfdG9fcHJpbyhjb25zdCBjaGFyICpzdHIpCit7CisJaWYgKHN0cm5jYXNlY21wKCJoaWdoIiwgc3RyLCBzdHJsZW4oc3RyKSkgPT0gMCkKKwkJcmV0dXJuICBTQ0hFRF9ISUdIOworCWVsc2UgaWYgKHN0cm5jYXNlY21wKCJkZWZhdWx0Iiwgc3RyLCBzdHJsZW4oc3RyKSkgPT0gMCkKKwkJcmV0dXJuIFNDSEVEX0RFRkFVTFQ7CisJZWxzZSBpZiAoc3RybmNhc2VjbXAoImxvdyIsIHN0ciwgc3RybGVuKHN0cikpID09IDApCisJCXJldHVybiBTQ0hFRF9MT1c7CisJZWxzZQorCQlyZXR1cm4gU0NIRURfRVJSOworfQorCisvKioKKyAqIGNyZWF0ZSBhbmQgb3BlbiBsb2dmaWxlCisgKgorICogQHBhcmFtIGRpciBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGxvZ2ZpbGUgc2hvdWxkIGJlIGNyZWF0ZWQKKyAqCisgKiBAcmV0dmFsIGxvZ2ZpbGUgb24gc3VjY2VzcworICogQHJldHZhbCBOVUxMIHdoZW4gdGhlIGZpbGUgY2FuJ3QgYmUgY3JlYXRlZAorICoqLworCitGSUxFICpwcmVwYXJlX291dHB1dChjb25zdCBjaGFyICpkaXJuYW1lKQoreworCUZJTEUgKm91dHB1dCA9IE5VTEw7CisJaW50IGxlbjsKKwljaGFyICpmaWxlbmFtZTsKKwlzdHJ1Y3QgdXRzbmFtZSBzeXNkYXRhOworCURJUiAqZGlyOworCisJZGlyID0gb3BlbmRpcihkaXJuYW1lKTsKKwlpZiAoZGlyID09IE5VTEwpIHsKKwkJaWYgKG1rZGlyKGRpcm5hbWUsIDA3NTUpKSB7CisJCQlwZXJyb3IoIm1rZGlyIik7CisJCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBDYW5ub3QgY3JlYXRlIGRpciAlc1xuIiwKKwkJCQlkaXJuYW1lKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJbGVuID0gc3RybGVuKGRpcm5hbWUpICsgMzA7CisJZmlsZW5hbWUgPSBtYWxsb2Moc2l6ZW9mKGNoYXIpICogbGVuKTsKKworCWlmICh1bmFtZSgmc3lzZGF0YSkgPT0gMCkgeworCQlsZW4gKz0gc3RybGVuKHN5c2RhdGEubm9kZW5hbWUpICsgc3RybGVuKHN5c2RhdGEucmVsZWFzZSk7CisJCWZpbGVuYW1lID0gcmVhbGxvYyhmaWxlbmFtZSwgc2l6ZW9mKGNoYXIpICogbGVuKTsKKworCQlpZihmaWxlbmFtZSA9PSBOVUxMKSB7CisJCQlwZXJyb3IoInJlYWxsb2MiKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJc25wcmludGYoZmlsZW5hbWUsIGxlbiAtIDEsICIlcy9iZW5jaG1hcmtfJXNfJXNfJWxpLmxvZyIsIAorCQkJZGlybmFtZSwgc3lzZGF0YS5ub2RlbmFtZSwgc3lzZGF0YS5yZWxlYXNlLCB0aW1lKE5VTEwpKTsKKwl9IGVsc2UgeworCQlzbnByaW50ZihmaWxlbmFtZSwgbGVuIC0xLCAiJXMvYmVuY2htYXJrXyVsaS5sb2ciLCBkaXJuYW1lLCB0aW1lKE5VTEwpKTsKKwl9CisKKwlkcHJpbnRmKCJsb2dpbGVuYW1lOiAlc1xuIiwgZmlsZW5hbWUpOworCisJaWYgKChvdXRwdXQgPSBmb3BlbihmaWxlbmFtZSwgIncrIikpID09IE5VTEwpIHsKKwkJcGVycm9yKCJmb3BlbiIpOworCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiB1bmFibGUgdG8gb3BlbiBsb2dmaWxlXG4iKTsKKwl9CisKKwlmcHJpbnRmKHN0ZG91dCwgIkxvZ2ZpbGU6ICVzXG4iLCBmaWxlbmFtZSk7CisKKwlmcmVlKGZpbGVuYW1lKTsKKwlmcHJpbnRmKG91dHB1dCwgIiNyb3VuZCBsb2FkIHNsZWVwIHBlcmZvcm1hbmNlIHBvd2Vyc2F2ZSBwZXJjZW50YWdlXG4iKTsKKwlyZXR1cm4gb3V0cHV0OworfQorCisvKioKKyAqIHJldHVybnMgdGhlIGRlZmF1bHQgY29uZmlnCisgKgorICogQHJldHZhbCBkZWZhdWx0IGNvbmZpZyBvbiBzdWNjZXNzCisgKiBAcmV0dmFsIE5VTEwgd2hlbiB0aGUgb3V0cHV0IGZpbGUgY2FuJ3QgYmUgY3JlYXRlZAorICoqLworCitzdHJ1Y3QgY29uZmlnICpwcmVwYXJlX2RlZmF1bHRfY29uZmlnKCkKK3sKKwlzdHJ1Y3QgY29uZmlnICpjb25maWcgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb25maWcpKTsKKworCWRwcmludGYoImxvYWRpbmcgZGVmYXVsdHNcbiIpOworCisJY29uZmlnLT5zbGVlcCA9IDUwMDAwMDsKKwljb25maWctPmxvYWQgPSA1MDAwMDA7CisJY29uZmlnLT5zbGVlcF9zdGVwID0gNTAwMDAwOworCWNvbmZpZy0+bG9hZF9zdGVwID0gNTAwMDAwOworCWNvbmZpZy0+Y3ljbGVzID0gNTsKKwljb25maWctPnJvdW5kcyA9IDUwOworCWNvbmZpZy0+Y3B1ID0gMDsJCisJY29uZmlnLT5wcmlvID0gU0NIRURfSElHSDsKKwljb25maWctPnZlcmJvc2UgPSAwOworCXN0cm5jcHkoY29uZmlnLT5nb3Zlcm5vciwgIm9uZGVtYW5kIiwgOCk7CisKKwljb25maWctPm91dHB1dCA9IHN0ZG91dDsKKworI2lmZGVmIERFRkFVTFRfQ09ORklHX0ZJTEUKKwlpZiAocHJlcGFyZV9jb25maWcoREVGQVVMVF9DT05GSUdfRklMRSwgY29uZmlnKSkKKwkJcmV0dXJuIE5VTEw7CisjZW5kaWYKKwlyZXR1cm4gY29uZmlnOworfQorCisvKioKKyAqIHBhcnNlcyBjb25maWcgZmlsZSBhbmQgcmV0dXJucyB0aGUgY29uZmlnIHRvIHRoZSBjYWxsZXIKKyAqCisgKiBAcGFyYW0gcGF0aCBjb25maWcgZmlsZSBuYW1lCisgKgorICogQHJldHZhbCAxIG9uIGVycm9yCisgKiBAcmV0dmFsIDAgb24gc3VjY2VzcworICoqLworCitpbnQgcHJlcGFyZV9jb25maWcoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGNvbmZpZyAqY29uZmlnKQoreworCXNpemVfdCBsZW4gPSAwOworCWNoYXIgKm9wdCwgKnZhbCwgKmxpbmUgPSBOVUxMOworCUZJTEUgKmNvbmZpZ2ZpbGUgPSBmb3BlbihwYXRoLCAiciIpOworCisJaWYgKGNvbmZpZyA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZXJyb3I6IGNvbmZpZyBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGNvbmZpZ2ZpbGUgPT0gTlVMTCkgeworCQlwZXJyb3IoImZvcGVuIik7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvcjogdW5hYmxlIHRvIHJlYWQgY29uZmlnZmlsZVxuIik7CisJCWZyZWUoY29uZmlnKTsKKwkJcmV0dXJuIDE7CisJfQorCisJd2hpbGUgKGdldGxpbmUoJmxpbmUsICZsZW4sIGNvbmZpZ2ZpbGUpICE9IC0xKQorCXsKKwkJaWYgKGxpbmVbMF0gPT0gJyMnIHx8IGxpbmVbMF0gPT0gJyAnKQorCQkJY29udGludWU7CisKKwkJc3NjYW5mKGxpbmUsICIlYXMgPSAlYXMiLCAmb3B0LCAmdmFsKTsKKworCQlkcHJpbnRmKCJwYXJzaW5nOiAlcyAtPiAlc1xuIiwgb3B0LCB2YWwpOworCisJCWlmIChzdHJuY21wKCJzbGVlcCIsIG9wdCwgc3RybGVuKG9wdCkpID09IDApCisJCQlzc2NhbmYodmFsLCAiJWxpIiwgJmNvbmZpZy0+c2xlZXApOworCisJCWVsc2UgaWYgKHN0cm5jbXAoImxvYWQiLCBvcHQsIHN0cmxlbihvcHQpKSA9PSAwKSAKKwkJCXNzY2FuZih2YWwsICIlbGkiLCAmY29uZmlnLT5sb2FkKTsKKworCQllbHNlIGlmIChzdHJuY21wKCJsb2FkX3N0ZXAiLCBvcHQsIHN0cmxlbihvcHQpKSA9PSAwKSAKKwkJCXNzY2FuZih2YWwsICIlbGkiLCAmY29uZmlnLT5sb2FkX3N0ZXApOworCisJCWVsc2UgaWYgKHN0cm5jbXAoInNsZWVwX3N0ZXAiLCBvcHQsIHN0cmxlbihvcHQpKSA9PSAwKSAKKwkJCXNzY2FuZih2YWwsICIlbGkiLCAmY29uZmlnLT5zbGVlcF9zdGVwKTsKKworCQllbHNlIGlmIChzdHJuY21wKCJjeWNsZXMiLCBvcHQsIHN0cmxlbihvcHQpKSA9PSAwKSAKKwkJCXNzY2FuZih2YWwsICIldSIsICZjb25maWctPmN5Y2xlcyk7CisKKwkJZWxzZSBpZiAoc3RybmNtcCgicm91bmRzIiwgb3B0LCBzdHJsZW4ob3B0KSkgPT0gMCkgCisJCQlzc2NhbmYodmFsLCAiJXUiLCAmY29uZmlnLT5yb3VuZHMpOworCisJCWVsc2UgaWYgKHN0cm5jbXAoInZlcmJvc2UiLCBvcHQsIHN0cmxlbihvcHQpKSA9PSAwKSAKKwkJCXNzY2FuZih2YWwsICIldSIsICZjb25maWctPnZlcmJvc2UpOworCisJCWVsc2UgaWYgKHN0cm5jbXAoIm91dHB1dCIsIG9wdCwgc3RybGVuKG9wdCkpID09IDApIAorCQkJY29uZmlnLT5vdXRwdXQgPSBwcmVwYXJlX291dHB1dCh2YWwpOyAKKworCQllbHNlIGlmIChzdHJuY21wKCJjcHUiLCBvcHQsIHN0cmxlbihvcHQpKSA9PSAwKSAKKwkJCXNzY2FuZih2YWwsICIldSIsICZjb25maWctPmNwdSk7CisKKwkJZWxzZSBpZiAoc3RybmNtcCgiZ292ZXJub3IiLCBvcHQsIDE0KSA9PSAwKSAKKwkJCXN0cm5jcHkoY29uZmlnLT5nb3Zlcm5vciwgdmFsLCAxNCk7CisKKwkJZWxzZSBpZiAoc3RybmNtcCgicHJpb3JpdHkiLCBvcHQsIHN0cmxlbihvcHQpKSA9PSAwKSB7CisJCQlpZiAoc3RyaW5nX3RvX3ByaW8odmFsKSAhPSBTQ0hFRF9FUlIpIAorCQkJCWNvbmZpZy0+cHJpbyA9IHN0cmluZ190b19wcmlvKHZhbCk7CisJCX0KKwl9CisKKwlmcmVlKGxpbmUpOworCWZyZWUob3B0KTsKKwlmcmVlKHZhbCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3BhcnNlLmggYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9wYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmY2RmYTIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9wYXJzZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qICBjcHVmcmVxLWJlbmNoIENQVUZyZXEgbWljcm9iZW5jaG1hcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBLb3JuYWNrZXIgPGNrb3JuYWNrZXJAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyogc3RydWN0IHRoYXQgaG9sZHMgdGhlIHJlcXVpcmVkIGNvbmZpZyBwYXJhbWV0ZXJzICovCitzdHJ1Y3QgY29uZmlnCit7CisJbG9uZyBzbGVlcDsJCS8qIHNsZWVwIHRpbWUgaW4gtXMgKi8KKwlsb25nIGxvYWQ7CQkvKiBsb2FkIHRpbWUgaW4gtXMgKi8KKwlsb25nIHNsZWVwX3N0ZXA7CS8qIHRpbWUgdmFsdWUgd2hpY2ggY2hhbmdlcyB0aGUKKwkJCQkgKiBzbGVlcCB0aW1lIGFmdGVyIGV2ZXJ5IHJvdW5kIGluILVzICovCisJbG9uZyBsb2FkX3N0ZXA7CQkvKiB0aW1lIHZhbHVlIHdoaWNoIGNoYW5nZXMgdGhlCisJCQkJICogbG9hZCB0aW1lIGFmdGVyIGV2ZXJ5IHJvdW5kIGluILVzICovCisJdW5zaWduZWQgaW50IGN5Y2xlczsJLyogY2FsY3VsYXRpb24gY3ljbGVzIHdpdGggdGhlIHNhbWUgc2xlZXAvbG9hZCB0aW1lICovCisJdW5zaWduZWQgaW50IHJvdW5kczsJLyogY2FsY3VsYXRpb24gcm91bmRzIHdpdGggaXRlcmF0ZWQgc2xlZXAvbG9hZCB0aW1lICovCisJdW5zaWduZWQgaW50IGNwdTsJLyogY3B1IGZvciB3aGljaCB0aGUgYWZmaW5pdHkgaXMgc2V0ICovCisJY2hhciBnb3Zlcm5vclsxNV07CS8qIGNwdWZyZXEgZ292ZXJub3IgKi8KKwllbnVtIHNjaGVkX3ByaW8JCS8qIHBvc3NpYmxlIHNjaGVkdWxlciBwcmlvcml0aWVzICovCisJeworCQlTQ0hFRF9FUlI9LTEsU0NIRURfSElHSCwgU0NIRURfREVGQVVMVCwgU0NIRURfTE9XCisJfSBwcmlvOworCisJdW5zaWduZWQgaW50IHZlcmJvc2U7CS8qIHZlcmJvc2Ugb3V0cHV0ICovCisJRklMRSAqb3V0cHV0OwkJLyogbG9nZmlsZSAqLworCWNoYXIgKm91dHB1dF9maWxlbmFtZTsJLyogbG9nZmlsZSBuYW1lLCBtdXN0IGJlIGZyZWVkIGF0IHRoZSBlbmQKKwkJCQkgICBpZiBvdXRwdXQgIT0gTlVMTCBhbmQgb3V0cHV0ICE9IHN0ZG91dCovCit9OworCitlbnVtIHNjaGVkX3ByaW8gc3RyaW5nX3RvX3ByaW8oY29uc3QgY2hhciAqc3RyKTsKKworRklMRSAqcHJlcGFyZV9vdXRwdXQoY29uc3QgY2hhciAqZGlyKTsKKworaW50IHByZXBhcmVfY29uZmlnKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBjb25maWcgKmNvbmZpZyk7CitzdHJ1Y3QgY29uZmlnICpwcmVwYXJlX2RlZmF1bHRfY29uZmlnKCk7CisKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3N5c3RlbS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvc3lzdGVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UzYTgyZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3N5c3RlbS5jCkBAIC0wLDAgKzEsMTg4IEBACisvKiAgY3B1ZnJlcS1iZW5jaCBDUFVGcmVxIG1pY3JvYmVuY2htYXJrCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gS29ybmFja2VyIDxja29ybmFja2VyQHN1c2UuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8c2NoZWQuaD4KKworI2luY2x1ZGUgPGNwdWZyZXEuaD4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN5c3RlbS5oIgorCisvKioKKyAqIHJldHVybnMgdGltZSBzaW5jZSBlcG9jaCBpbiC1cworICoKKyAqIEByZXR2YWwgdGltZQorICoqLworCitsb25nIGxvbmcgaW50IGdldF90aW1lKCkKK3sKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisKKwlnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7CisKKwlyZXR1cm4gKGxvbmcgbG9uZyBpbnQpKG5vdy50dl9zZWMgKiAxMDAwMDAwTEwgKyBub3cudHZfdXNlYyk7Cit9CisKKy8qKgorICogc2V0cyB0aGUgY3B1ZnJlcSBnb3Zlcm5vcgorICoKKyAqIEBwYXJhbSBnb3Zlcm5vciBjcHVmcmVxIGdvdmVybm9yIG5hbWUKKyAqIEBwYXJhbSBjcHUgY3B1IGZvciB3aGljaCB0aGUgZ292ZXJub3Igc2hvdWxkIGJlIHNldAorICoKKyAqIEByZXR2YWwgMCBvbiBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIHdoZW4gZmFpbGVkCisgKiovCisKK2ludCBzZXRfY3B1ZnJlcV9nb3Zlcm5vcihjaGFyICpnb3Zlcm5vciwgdW5zaWduZWQgaW50IGNwdSkKK3sKKworCWRwcmludGYoInNldCAlcyBhcyBjcHVmcmVxIGdvdmVybm9yXG4iLCBnb3Zlcm5vcik7CisKKwlpZiAoY3B1ZnJlcV9jcHVfZXhpc3RzKGNwdSkgIT0gMCkgeworCQlwZXJyb3IoImNwdWZyZXFfY3B1X2V4aXN0cyIpOworCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiBjcHUgJXUgZG9lcyBub3QgZXhpc3RcbiIsIGNwdSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoY3B1ZnJlcV9tb2RpZnlfcG9saWN5X2dvdmVybm9yKGNwdSwgZ292ZXJub3IpICE9IDApIHsKKwkJcGVycm9yKCJjcHVmcmVxX21vZGlmeV9wb2xpY3lfZ292ZXJub3IiKTsKKwkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogdW5hYmxlIHRvIHNldCAlcyBnb3Zlcm5vclxuIiwgZ292ZXJub3IpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc2V0cyBjcHUgYWZmaW5pdHkgZm9yIHRoZSBwcm9jZXNzCisgKgorICogQHBhcmFtIGNwdSBjcHUjIHRvIHdoaWNoIHRoZSBhZmZpbml0eSBzaG91bGQgYmUgc2V0CisgKgorICogQHJldHZhbCAwIG9uIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgd2hlbiBzZXR0aW5nIHRoZSBhZmZpbml0eSBmYWlsZWQKKyAqKi8KKworaW50IHNldF9jcHVfYWZmaW5pdHkodW5zaWduZWQgaW50IGNwdSkKK3sKKwljcHVfc2V0X3QgY3B1c2V0OworCQorCUNQVV9aRVJPKCZjcHVzZXQpOworCUNQVV9TRVQoY3B1LCAmY3B1c2V0KTsKKworCWRwcmludGYoInNldCBhZmZpbml0eSB0byBjcHUgIyV1XG4iLCBjcHUpOworCisJaWYgKHNjaGVkX3NldGFmZmluaXR5KGdldHBpZCgpLCBzaXplb2YoY3B1X3NldF90KSwgJmNwdXNldCkgPCAwKSB7CisJCXBlcnJvcigic2NoZWRfc2V0YWZmaW5pdHkiKTsKKwkJZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiB1bmFibGUgdG8gc2V0IGNwdSBhZmZpbml0eVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzZXRzIHRoZSBwcm9jZXNzIHByaW9yaXR5IHBhcmFtZXRlcgorICoKKyAqIEBwYXJhbSBwcmlvcml0eSBwcmlvcml0eSB2YWx1ZQorICoKKyAqIEByZXR2YWwgMCBvbiBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIHdoZW4gc2V0dGluZyB0aGUgcHJpb3JpdHkgZmFpbGVkCisgKiovCisKK2ludCBzZXRfcHJvY2Vzc19wcmlvcml0eShpbnQgcHJpb3JpdHkpCit7CisJc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtOworCisJZHByaW50Zigic2V0IHNjaGVkdWxlciBwcmlvcml0eSB0byAlaVxuIiwgcHJpb3JpdHkpOworCisJcGFyYW0uc2NoZWRfcHJpb3JpdHkgPSBwcmlvcml0eTsKKworCWlmIChzY2hlZF9zZXRzY2hlZHVsZXIoMCwgU0NIRURVTEVSLCAmcGFyYW0pIDwgMCkgeworCQlwZXJyb3IoInNjaGVkX3NldHNjaGVkdWxlciIpOworCQlmcHJpbnRmKHN0ZGVyciwgIndhcm5pbmc6IHVuYWJsZSB0byBzZXQgc2NoZWR1bGVyIHByaW9yaXR5XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIG5vdGlmeXMgdGhlIHVzZXIgdGhhdCB0aGUgYmVuY2htYXJrIG1heSBydW4gc29tZSB0aW1lIAorICoKKyAqIEBwYXJhbSBjb25maWcgYmVuY2htYXJrIGNvbmZpZyB2YWx1ZXMKKyAqCisgKiovCisKK3ZvaWQgcHJlcGFyZV91c2VyKGNvbnN0IHN0cnVjdCBjb25maWcgKmNvbmZpZykKK3sKKwl1bnNpZ25lZCBsb25nIHNsZWVwX3RpbWUgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9hZF90aW1lID0gMDsKKwl1bnNpZ25lZCBpbnQgcm91bmQ7CisKKwlmb3IgKHJvdW5kID0gMDsgcm91bmQgPCBjb25maWctPnJvdW5kczsgcm91bmQrKykgeworCQlzbGVlcF90aW1lICs9ICAyICogY29uZmlnLT5jeWNsZXMgKiAoY29uZmlnLT5zbGVlcCArIGNvbmZpZy0+c2xlZXBfc3RlcCAqIHJvdW5kKTsKKwkJbG9hZF90aW1lICs9IDIgKiBjb25maWctPmN5Y2xlcyAqIChjb25maWctPmxvYWQgKyBjb25maWctPmxvYWRfc3RlcCAqIHJvdW5kKSArIChjb25maWctPmxvYWQgKyBjb25maWctPmxvYWRfc3RlcCAqIHJvdW5kICogNCk7CisJfQorCisJaWYgKGNvbmZpZy0+dmVyYm9zZSB8fCBjb25maWctPm91dHB1dCAhPSBzdGRvdXQpCisJCXByaW50ZigiYXBwcm94LiB0ZXN0IGR1cmF0aW9uOiAlaW1cbiIsCisJCSAgICAgICAoaW50KSgoc2xlZXBfdGltZSArIGxvYWRfdGltZSkgLyA2MDAwMDAwMCkpOworfQorCisvKioKKyAqIHNldHMgdXAgdGhlIGNwdSBhZmZpbml0eSBhbmQgc2NoZWR1bGVyIHByaW9yaXR5CisgKgorICogQHBhcmFtIGNvbmZpZyBiZW5jaG1hcmsgY29uZmlnIHZhbHVlcworICoKKyAqKi8KKwordm9pZCBwcmVwYXJlX3N5c3RlbShjb25zdCBzdHJ1Y3QgY29uZmlnICpjb25maWcpCit7CisJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJcHJpbnRmKCJzZXQgY3B1IGFmZmluaXR5IHRvIGNwdSAjJXVcbiIsIGNvbmZpZy0+Y3B1KTsKKworCXNldF9jcHVfYWZmaW5pdHkoY29uZmlnLT5jcHUpOworCisJc3dpdGNoIChjb25maWctPnByaW8pIHsKKwljYXNlIFNDSEVEX0hJR0g6CisJCWlmIChjb25maWctPnZlcmJvc2UpCisJCQlwcmludGYoImhpZ2ggcHJpb3JpdHkgY29uZGl0aW9uIHJlcXVlc3RlZFxuIik7CisKKwkJc2V0X3Byb2Nlc3NfcHJpb3JpdHkoUFJJT1JJVFlfSElHSCk7CisJCWJyZWFrOworCWNhc2UgU0NIRURfTE9XOgorCQlpZiAoY29uZmlnLT52ZXJib3NlKQorCQkJcHJpbnRmKCJsb3cgcHJpb3JpdHkgY29uZGl0aW9uIHJlcXVlc3RlZFxuIik7CisKKwkJc2V0X3Byb2Nlc3NfcHJpb3JpdHkoUFJJT1JJVFlfTE9XKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJCXByaW50ZigiZGVmYXVsdCBwcmlvcml0eSBjb25kaXRpb24gcmVxdWVzdGVkXG4iKTsKKworCQlzZXRfcHJvY2Vzc19wcmlvcml0eShQUklPUklUWV9ERUZBVUxUKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3N5c3RlbS5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E4Yzg1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3N5c3RlbS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qICBjcHVmcmVxLWJlbmNoIENQVUZyZXEgbWljcm9iZW5jaG1hcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBLb3JuYWNrZXIgPGNrb3JuYWNrZXJAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgInBhcnNlLmgiCisKK2xvbmcgbG9uZyBnZXRfdGltZSgpOworCitpbnQgc2V0X2NwdWZyZXFfZ292ZXJub3IoY2hhciAqZ292ZXJub3IsIHVuc2lnbmVkIGludCBjcHUpOworaW50IHNldF9jcHVfYWZmaW5pdHkodW5zaWduZWQgaW50IGNwdSk7CitpbnQgc2V0X3Byb2Nlc3NfcHJpb3JpdHkoaW50IHByaW9yaXR5KTsKKwordm9pZCBwcmVwYXJlX3VzZXIoY29uc3Qgc3RydWN0IGNvbmZpZyAqY29uZmlnKTsKK3ZvaWQgcHJlcGFyZV9zeXN0ZW0oY29uc3Qgc3RydWN0IGNvbmZpZyAqY29uZmlnKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2J1aWxkL2NjZHYuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2J1aWxkL2NjZHYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2FlOWRhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYnVpbGQvY2Nkdi5jCkBAIC0wLDAgKzEsMzg3IEBACisvKiBjY2R2LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywgYnkgTWlrZSBHbGVhc29uLCBOY0ZUUCBTb2Z0d2FyZS4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2RlZmluZSBTRVRDT0xPUl9TVUNDRVNTCShnQU5TSUVzY2FwZXMgPyAiXDAzM1wxMzMxOzMybSIgOiAiIikKKyNkZWZpbmUgU0VUQ09MT1JfRkFJTFVSRQkoZ0FOU0lFc2NhcGVzID8gIlwwMzNcMTMzMTszMW0iIDogIiIpCisjZGVmaW5lIFNFVENPTE9SX1dBUk5JTkcJKGdBTlNJRXNjYXBlcyA/ICJcMDMzXDEzMzE7MzNtIiA6ICIiKQorI2RlZmluZSBTRVRDT0xPUl9OT1JNQUwJCShnQU5TSUVzY2FwZXMgPyAiXDAzM1wxMzMwOzM5bSIgOiAiIikKKworI2RlZmluZSBURVhUX0JMT0NLX1NJWkUgODE5MgorI2RlZmluZSBJTkRFTlQgMgorCisjZGVmaW5lIFRFUk1TICJ2dDEwMDp2dDEwMjp2dDIyMDp2dDMyMDp4dGVybTp4dGVybS1jb2xvcjphbnNpOmxpbnV4OnNjb3Rlcm06c2NvYW5zaTpkdHRlcm06Y29uczI1OmN5Z3dpbiIKKworc2l6ZV90IGdOQnVmVXNlZCA9IDAsIGdOQnVmQWxsb2NhdGVkID0gMDsKK2NoYXIgKmdCdWYgPSBOVUxMOworaW50IGdDQ1BJRDsKK2NoYXIgZ0FjdGlvblsyMDBdID0gIiI7CitjaGFyIGdUYXJnZXRbMjAwXSA9ICIiOworY2hhciBnQXJbMzJdID0gIiI7CitjaGFyIGdBckxpYnJhcnlUYXJnZXRbNjRdID0gIiI7CitpbnQgZ0R1bXBDbWRBcmdzID0gMDsKK2NoYXIgZ0FyZ3NTdHJbMTAwMF07CitpbnQgZ0NvbHVtbnMgPSA4MDsKK2ludCBnQU5TSUVzY2FwZXMgPSAwOworaW50IGdFeGl0U3RhdHVzID0gOTU7CisKK3N0YXRpYyB2b2lkIER1bXBGb3JtYXR0ZWRPdXRwdXQodm9pZCkKK3sKKwljaGFyICpjcDsKKwljaGFyIHNwYWNlc1s4ICsgMV0gPSAiICAgICAgICAiOworCWNoYXIgKnNhdmVkOworCWludCBjdXJjb2w7CisJaW50IGk7CisKKwljdXJjb2wgPSAwOworCXNhdmVkID0gTlVMTDsKKwlmb3IgKGNwID0gZ0J1ZiArICgoZ0R1bXBDbWRBcmdzID09IDApID8gc3RybGVuKGdBcmdzU3RyKSA6IDApOyA7IGNwKyspIHsKKwkJaWYgKCpjcCA9PSAnXDAnKSB7CisJCQlpZiAoc2F2ZWQgIT0gTlVMTCkgeworCQkJCWNwID0gc2F2ZWQ7CisJCQkJc2F2ZWQgPSBOVUxMOworCQkJfSBlbHNlIGJyZWFrOworCQl9CisJCWlmICgqY3AgPT0gJ1xyJykKKwkJCWNvbnRpbnVlOworCQlpZiAoKmNwID09ICdcdCcpIHsKKwkJCXNhdmVkID0gY3AgKyAxOworCQkJY3AgPSBzcGFjZXMgKyA4IC0gKDggLSAoKGN1cmNvbCAtIElOREVOVCAtIDEpICUgOCkpOworCQl9CisJCWlmIChjdXJjb2wgPT0gMCkgeworCQkJZm9yIChpID0gSU5ERU5UOyAtLWkgPj0gMDsgKQorCQkJCXB1dGNoYXIoJyAnKTsKKwkJCWN1cmNvbCA9IElOREVOVDsKKwkJfQorCQlwdXRjaGFyKCpjcCk7CisJCWlmICgrK2N1cmNvbCA9PSAoZ0NvbHVtbnMgLSAxKSkgeworCQkJcHV0Y2hhcignXG4nKTsKKwkJCWN1cmNvbCA9IDA7CisJCX0gZWxzZSBpZiAoKmNwID09ICdcbicpCisJCQljdXJjb2wgPSAwOworCX0KKwlmcmVlKGdCdWYpOworfQkvKiBEdW1wRm9ybWF0dGVkT3V0cHV0ICovCisKKworCisvKiBEaWZmdGltZSgpLCBvbmx5IGZvciB0aW1ldmFsIHN0cnVjdHVyZXMuICAqLworc3RhdGljIHZvaWQgVGltZVZhbFN1YnRyYWN0KHN0cnVjdCB0aW1ldmFsICp0ZGlmZiwgc3RydWN0IHRpbWV2YWwgKnQxLCBzdHJ1Y3QgdGltZXZhbCAqdDApCit7CisJdGRpZmYtPnR2X3NlYyA9IHQxLT50dl9zZWMgLSB0MC0+dHZfc2VjOworCXRkaWZmLT50dl91c2VjID0gdDEtPnR2X3VzZWMgLSB0MC0+dHZfdXNlYzsKKwlpZiAodGRpZmYtPnR2X3VzZWMgPCAwKSB7CisJCXRkaWZmLT50dl9zZWMtLTsKKwkJdGRpZmYtPnR2X3VzZWMgKz0gMTAwMDAwMDsKKwl9Cit9CS8qIFRpbWVWYWxTdWJ0cmFjdCAqLworCisKKworc3RhdGljIHZvaWQgV2FpdCh2b2lkKQoreworCWludCBwaWQyLCBzdGF0dXM7CisKKwlkbyB7CisJCXN0YXR1cyA9IDA7CisJCXBpZDIgPSAoaW50KSB3YWl0cGlkKGdDQ1BJRCwgJnN0YXR1cywgMCk7CisJfSB3aGlsZSAoKChwaWQyID49IDApICYmICghIFdJRkVYSVRFRChzdGF0dXMpKSkgfHwgKChwaWQyIDwgMCkgJiYgKGVycm5vID09IEVJTlRSKSkpOworCWlmIChXSUZFWElURUQoc3RhdHVzKSkKKwkJZ0V4aXRTdGF0dXMgPSBXRVhJVFNUQVRVUyhzdGF0dXMpOworfQkvKiBXYWl0ICovCisKKworCitzdGF0aWMgaW50IFNsdXJwUHJvZ3Jlc3MoaW50IGZkKQoreworCWNoYXIgczFbNzFdOworCWNoYXIgKm5ld2J1ZjsKKwlpbnQgbnJlYWR5OworCXNpemVfdCBudG9yZWFkOworCXNzaXplX3QgbnJlYWQ7CisJc3RydWN0IHRpbWV2YWwgbm93LCB0bmV4dCwgdGxlZnQ7CisJZmRfc2V0IHNzOworCWZkX3NldCBzczI7CisJY29uc3QgY2hhciAqdHJhaWwgPSAiLy1cXHwiLCAqdHJhaWxjcDsKKworCXRyYWlsY3AgPSB0cmFpbDsKKwlzbnByaW50ZihzMSwgc2l6ZW9mKHMxKSwgIiVzJXMlcy4uLiAiLCBnQWN0aW9uLCBnVGFyZ2V0WzBdID8gIiAiIDogIiIsIGdUYXJnZXQpOworCXByaW50ZigiXHIlLTcwcyUtOXMiLCBzMSwgIiIpOworCWZmbHVzaChzdGRvdXQpOworCisJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworCXRuZXh0ID0gbm93OworCXRuZXh0LnR2X3NlYysrOworCXRsZWZ0LnR2X3NlYyA9IDE7CisJdGxlZnQudHZfdXNlYyA9IDA7CisJRkRfWkVSTygmc3MyKTsKKwlGRF9TRVQoZmQsICZzczIpOworCWZvcig7OykgeworCQlpZiAoZ05CdWZVc2VkID09IChnTkJ1ZkFsbG9jYXRlZCAtIDEpKSB7CisJCQlpZiAoKG5ld2J1ZiA9IChjaGFyICopIHJlYWxsb2MoZ0J1ZiwgZ05CdWZBbGxvY2F0ZWQgKyBURVhUX0JMT0NLX1NJWkUpKSA9PSBOVUxMKSB7CisJCQkJcGVycm9yKCJjY2R2OiByZWFsbG9jIik7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCQlnTkJ1ZkFsbG9jYXRlZCArPSBURVhUX0JMT0NLX1NJWkU7CisJCQlnQnVmID0gbmV3YnVmOworCQl9CisJCWZvciAoOzspIHsKKwkJCXNzID0gc3MyOworCQkJbnJlYWR5ID0gc2VsZWN0KGZkICsgMSwgJnNzLCBOVUxMLCBOVUxMLCAmdGxlZnQpOworCQkJaWYgKG5yZWFkeSA9PSAxKQorCQkJCWJyZWFrOworCQkJaWYgKG5yZWFkeSA8IDApIHsKKwkJCQlpZiAoZXJybm8gIT0gRUlOVFIpIHsKKwkJCQkJcGVycm9yKCJjY2R2OiBzZWxlY3QiKTsKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworCQkJaWYgKChub3cudHZfc2VjID4gdG5leHQudHZfc2VjKSB8fCAoKG5vdy50dl9zZWMgPT0gdG5leHQudHZfc2VjKSAmJiAobm93LnR2X3VzZWMgPj0gdG5leHQudHZfdXNlYykpKSB7CisJCQkJdG5leHQgPSBub3c7CisJCQkJdG5leHQudHZfc2VjKys7CisJCQkJdGxlZnQudHZfc2VjID0gMTsKKwkJCQl0bGVmdC50dl91c2VjID0gMDsKKwkJCQlwcmludGYoIlxyJS03MXMlYyUtN3MiLCBzMSwgKnRyYWlsY3AsICIiKTsKKwkJCQlmZmx1c2goc3Rkb3V0KTsKKwkJCQlpZiAoKisrdHJhaWxjcCA9PSAnXDAnKQorCQkJCQl0cmFpbGNwID0gdHJhaWw7CisJCQl9IGVsc2UgeworCQkJCVRpbWVWYWxTdWJ0cmFjdCgmdGxlZnQsICZ0bmV4dCwgJm5vdyk7CisJCQl9CisJCX0KKwkJbnRvcmVhZCA9IChnTkJ1ZkFsbG9jYXRlZCAtIGdOQnVmVXNlZCAtIDEpOworCQlucmVhZCA9IHJlYWQoZmQsIGdCdWYgKyBnTkJ1ZlVzZWQsIG50b3JlYWQpOworCQlpZiAobnJlYWQgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQkJY29udGludWU7CisJCQlwZXJyb3IoImNjZHY6IHJlYWQiKTsKKwkJCXJldHVybiAoLTEpOworCQl9IGVsc2UgaWYgKG5yZWFkID09IDApIHsKKwkJCWJyZWFrOworCQl9CisJCWdOQnVmVXNlZCArPSBucmVhZDsKKwkJZ0J1ZltnTkJ1ZlVzZWRdID0gJ1wwJzsKKwl9CisJc25wcmludGYoczEsIHNpemVvZihzMSksICIlcyVzJXM6ICIsIGdBY3Rpb24sIGdUYXJnZXRbMF0gPyAiICIgOiAiIiwgZ1RhcmdldCk7CisJV2FpdCgpOworCWlmIChnRXhpdFN0YXR1cyA9PSAwKSB7CisJCXByaW50ZigiXHIlLTcwcyIsIHMxKTsKKwkJcHJpbnRmKCJbJXMlcyVzXSIsICgoZ05CdWZVc2VkIC0gc3RybGVuKGdBcmdzU3RyKSkgPCA0KSA/IFNFVENPTE9SX1NVQ0NFU1MgOiBTRVRDT0xPUl9XQVJOSU5HLCAiT0siLCBTRVRDT0xPUl9OT1JNQUwpOworCQlwcmludGYoIiUtNXNcbiIsICIgIik7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJcciUtNzBzIiwgczEpOworCQlwcmludGYoIlslcyVzJXNdIiwgU0VUQ09MT1JfRkFJTFVSRSwgIkVSUk9SIiwgU0VUQ09MT1JfTk9STUFMKTsKKwkJcHJpbnRmKCIlLTJzXG4iLCAiICIpOworCQlnRHVtcENtZEFyZ3MgPSAxOwkvKiBwcmludCBjbWQgd2hlbiB0aGVyZSBhcmUgZXJyb3JzICovCisJfQorCWZmbHVzaChzdGRvdXQpOworCXJldHVybiAoMCk7Cit9CS8qIFNsdXJwUHJvZ3Jlc3MgKi8KKworCisKK3N0YXRpYyBpbnQgU2x1cnBBbGwoaW50IGZkKQoreworCWNoYXIgKm5ld2J1ZjsKKwlzaXplX3QgbnRvcmVhZDsKKwlzc2l6ZV90IG5yZWFkOworCisJcHJpbnRmKCIlcyVzJXMuXG4iLCBnQWN0aW9uLCBnVGFyZ2V0WzBdID8gIiAiIDogIiIsIGdUYXJnZXQpOworCWZmbHVzaChzdGRvdXQpOworCisJZm9yKDs7KSB7CisJCWlmIChnTkJ1ZlVzZWQgPT0gKGdOQnVmQWxsb2NhdGVkIC0gMSkpIHsKKwkJCWlmICgobmV3YnVmID0gKGNoYXIgKikgcmVhbGxvYyhnQnVmLCBnTkJ1ZkFsbG9jYXRlZCArIFRFWFRfQkxPQ0tfU0laRSkpID09IE5VTEwpIHsKKwkJCQlwZXJyb3IoImNjZHY6IHJlYWxsb2MiKTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCWdOQnVmQWxsb2NhdGVkICs9IFRFWFRfQkxPQ0tfU0laRTsKKwkJCWdCdWYgPSBuZXdidWY7CisJCX0KKwkJbnRvcmVhZCA9IChnTkJ1ZkFsbG9jYXRlZCAtIGdOQnVmVXNlZCAtIDEpOworCQlucmVhZCA9IHJlYWQoZmQsIGdCdWYgKyBnTkJ1ZlVzZWQsIG50b3JlYWQpOworCQlpZiAobnJlYWQgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQkJY29udGludWU7CisJCQlwZXJyb3IoImNjZHY6IHJlYWQiKTsKKwkJCXJldHVybiAoLTEpOworCQl9IGVsc2UgaWYgKG5yZWFkID09IDApIHsKKwkJCWJyZWFrOworCQl9CisJCWdOQnVmVXNlZCArPSBucmVhZDsKKwkJZ0J1ZltnTkJ1ZlVzZWRdID0gJ1wwJzsKKwl9CisJV2FpdCgpOworCWdEdW1wQ21kQXJncyA9IChnRXhpdFN0YXR1cyAhPSAwKTsJLyogcHJpbnQgY21kIHdoZW4gdGhlcmUgYXJlIGVycm9ycyAqLworCXJldHVybiAoMCk7Cit9CS8qIFNsdXJwQWxsICovCisKKworCitzdGF0aWMgY29uc3QgY2hhciAqQmFzZW5hbWUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwljb25zdCBjaGFyICpjcDsKKwljcCA9IHN0cnJjaHIocGF0aCwgJy8nKTsKKwlpZiAoY3AgPT0gTlVMTCkKKwkJcmV0dXJuIChwYXRoKTsKKwlyZXR1cm4gKGNwICsgMSk7Cit9CS8qIEJhc2VuYW1lICovCisKKworCitzdGF0aWMgY29uc3QgY2hhciAqIEV4dGVuc2lvbihjb25zdCBjaGFyICpwYXRoKQoreworCWNvbnN0IGNoYXIgKmNwID0gcGF0aDsKKwljcCA9IHN0cnJjaHIocGF0aCwgJy4nKTsKKwlpZiAoY3AgPT0gTlVMTCkKKwkJcmV0dXJuICgiIik7CisJLy8gcHJpbnRmKCJFeHRlbnNpb249JyVzJ1xuIiwgY3ApOworCXJldHVybiAoY3ApOworfQkvKiBFeHRlbnNpb24gKi8KKworCisKK3N0YXRpYyB2b2lkIFVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTogY2NkdiAvcGF0aC90by9jYyBDRkxBR1MuLi5cblxuIik7CisJZnByaW50ZihzdGRlcnIsICJJIHdyb3RlIHRoaXMgdG8gcmVkdWNlIHRoZSBkZWx1Z2UgTWFrZSBvdXRwdXQgdG8gbWFrZSBmaW5kaW5nIGFjdHVhbCBwcm9ibGVtc1xuIik7CisJZnByaW50ZihzdGRlcnIsICJlYXNpZXIuICBJdCBpcyBpbnRlbmRlZCB0byBiZSBpbnZva2VkIGZyb20gTWFrZWZpbGVzLCBsaWtlIHRoaXMuICBJbnN0ZWFkIG9mOlxuXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0LmMubzpcbiIpOworCWZwcmludGYoc3RkZXJyLCAiXHRcdCQoQ0MpICQoQ0ZMQUdTKSAkKERFRlMpICQoQ1BQRkxBR1MpICQ8IC1jXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuUmV3cml0ZSB5b3VyIHJ1bGUgc28gaXQgbG9va3MgbGlrZTpcblxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdC5jLm86XG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0XHRAY2NkdiAkKENDKSAkKENGTEFHUykgJChERUZTKSAkKENQUEZMQUdTKSAkPCAtY1xuXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgImNjZHYgMS4xLjAgaXMgRnJlZSB1bmRlciB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLiAgRW5qb3khXG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAgLS0gTWlrZSBHbGVhc29uLCBOY0ZUUCBTb2Z0d2FyZSA8aHR0cDovL3d3dy5uY2Z0cC5jb20+XG4iKTsKKwlleGl0KDk2KTsKK30JLyogVXNhZ2UgKi8KKworCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgcGlwZTFbMl07CisJaW50IGRldm51bGw7CisJY2hhciBlbWVyZ1syNTZdOworCWludCBmZDsKKwlpbnQgbnJlYWQ7CisJaW50IGk7CisJaW50IGNjID0gMCwgcGNoID0gMDsKKwljb25zdCBjaGFyICpxdW90ZTsKKworCWlmIChhcmdjIDwgMikKKwkJVXNhZ2UoKTsKKworCXNucHJpbnRmKGdBY3Rpb24sIHNpemVvZihnQWN0aW9uKSwgIlJ1bm5pbmcgJXMiLCBCYXNlbmFtZShhcmd2WzFdKSk7CisJbWVtc2V0KGdBcmdzU3RyLCAwLCBzaXplb2YoZ0FyZ3NTdHIpKTsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCS8vIHByaW50ZigiYXJndlslZF09JyVzJ1xuIiwgaSwgYXJndltpXSk7CisJCXF1b3RlID0gKHN0cmNocihhcmd2W2ldLCAnICcpICE9IE5VTEwpID8gIlwiIiA6ICIiOworCQlzbnByaW50ZihnQXJnc1N0ciArIHN0cmxlbihnQXJnc1N0ciksIHNpemVvZihnQXJnc1N0cikgLSBzdHJsZW4oZ0FyZ3NTdHIpLCAiJXMlcyVzJXMlcyIsIChpID09IDEpID8gIiIgOiAiICIsIHF1b3RlLCBhcmd2W2ldLCBxdW90ZSwgKGkgPT0gKGFyZ2MgLSAxKSkgPyAiXG4iIDogIiIpOworCQlpZiAoKHN0cmNtcChhcmd2W2ldLCAiLW8iKSA9PSAwKSAmJiAoKGkgKyAxKSA8IGFyZ2MpKSB7CisJCQlpZiAoc3RyY2FzZWNtcChFeHRlbnNpb24oYXJndltpICsgMV0pLCAiLm8iKSAhPSAwKSB7CisJCQkJc3RyY3B5KGdBY3Rpb24sICJMaW5raW5nIik7CisJCQkJc25wcmludGYoZ1RhcmdldCwgc2l6ZW9mKGdUYXJnZXQpLCAiJXMiLCBCYXNlbmFtZShhcmd2W2kgKyAxXSkpOworCQkJfQorCQl9IGVsc2UgaWYgKHN0cmNocigiLSsiLCAoaW50KSBhcmd2W2ldWzBdKSAhPSBOVUxMKSB7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmIChzdHJuY2FzZWNtcChFeHRlbnNpb24oYXJndltpXSksICIuYyIsIDIpID09IDApIHsKKwkJCWNjKys7CisJCQlzbnByaW50ZihnVGFyZ2V0LCBzaXplb2YoZ1RhcmdldCksICIlcyIsIEJhc2VuYW1lKGFyZ3ZbaV0pKTsKKwkJCS8vIHByaW50ZigiZ1RhcmdldD0nJXMnXG4iLCBnVGFyZ2V0KTsKKwkJfSBlbHNlIGlmICgoc3RybmNhc2VjbXAoRXh0ZW5zaW9uKGFyZ3ZbaV0pLCAiLmgiLCAyKSA9PSAwKSAmJiAoY2MgPT0gMCkpIHsKKwkJCXBjaCsrOworCQkJc25wcmludGYoZ1RhcmdldCwgc2l6ZW9mKGdUYXJnZXQpLCAiJXMiLCBCYXNlbmFtZShhcmd2W2ldKSk7CisJCX0gZWxzZSBpZiAoKGkgPT0gMSkgJiYgKHN0cmNtcChCYXNlbmFtZShhcmd2W2ldKSwgImFyIikgPT0gMCkpIHsKKwkJCXNucHJpbnRmKGdBciwgc2l6ZW9mKGdBciksICIlcyIsIEJhc2VuYW1lKGFyZ3ZbaV0pKTsKKwkJfSBlbHNlIGlmICgoZ0FyTGlicmFyeVRhcmdldFswXSA9PSAnXDAnKSAmJiAoc3RyY2FzZWNtcChFeHRlbnNpb24oYXJndltpXSksICIuYSIpID09IDApKSB7CisJCQlzbnByaW50ZihnQXJMaWJyYXJ5VGFyZ2V0LCBzaXplb2YoZ0FyTGlicmFyeVRhcmdldCksICIlcyIsIEJhc2VuYW1lKGFyZ3ZbaV0pKTsKKwkJfQorCX0KKwlpZiAoKGdBclswXSAhPSAnXDAnKSAmJiAoZ0FyTGlicmFyeVRhcmdldFswXSAhPSAnXDAnKSkgeworCQlzdHJjcHkoZ0FjdGlvbiwgIkNyZWF0aW5nIGxpYnJhcnkiKTsKKwkJc25wcmludGYoZ1RhcmdldCwgc2l6ZW9mKGdUYXJnZXQpLCAiJXMiLCBnQXJMaWJyYXJ5VGFyZ2V0KTsKKwl9IGVsc2UgaWYgKHBjaCA+IDApIHsKKwkJc3RyY3B5KGdBY3Rpb24sICJQcmVjb21waWxpbmciKTsKKwl9IGVsc2UgaWYgKGNjID4gMCkgeworCQlzdHJjcHkoZ0FjdGlvbiwgIkNvbXBpbGluZyIpOworCX0KKworCWlmIChwaXBlKHBpcGUxKSA8IDApIHsKKwkJcGVycm9yKCJjY2R2OiBwaXBlIik7CisJCWV4aXQoOTcpOworCX0KKworCSh2b2lkKSBjbG9zZSgwKTsKKwlkZXZudWxsID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSLCAwMDY2Nik7CisJaWYgKChkZXZudWxsICE9IDApICYmIChkdXAyKGRldm51bGwsIDApID09IDApKQorCQljbG9zZShkZXZudWxsKTsKKworCWdDQ1BJRCA9IChpbnQpIGZvcmsoKTsKKwlpZiAoZ0NDUElEIDwgMCkgeworCQkodm9pZCkgY2xvc2UocGlwZTFbMF0pOworCQkodm9pZCkgY2xvc2UocGlwZTFbMV0pOworCQlwZXJyb3IoImNjZHY6IGZvcmsiKTsKKwkJZXhpdCg5OCk7CisJfSBlbHNlIGlmIChnQ0NQSUQgPT0gMCkgeworCQkvKiBDaGlsZCAqLworCQkodm9pZCkgY2xvc2UocGlwZTFbMF0pOwkJLyogY2xvc2UgcmVhZCBlbmQgKi8KKwkJaWYgKHBpcGUxWzFdICE9IDEpIHsJCS8qIHVzZSB3cml0ZSBlbmQgb24gc3Rkb3V0ICovCisJCQkodm9pZCkgZHVwMihwaXBlMVsxXSwgMSk7CisJCQkodm9pZCkgY2xvc2UocGlwZTFbMV0pOworCQl9CisJCSh2b2lkKSBkdXAyKDEsIDIpOwkJLyogdXNlIHdyaXRlIGVuZCBvbiBzdGRlcnIgKi8KKwkJZXhlY3ZwKGFyZ3ZbMV0sIGFyZ3YgKyAxKTsKKwkJcGVycm9yKGFyZ3ZbMV0pOworCQlleGl0KDk5KTsKKwl9CisKKwkvKiBwYXJlbnQgKi8KKwkodm9pZCkgY2xvc2UocGlwZTFbMV0pOwkJLyogY2xvc2Ugd3JpdGUgZW5kICovCisJZmQgPSBwaXBlMVswXTsJCQkvKiB1c2UgcmVhZCBlbmQgKi8KKworCWdDb2x1bW5zID0gKGdldGVudigiQ09MVU1OUyIpICE9IE5VTEwpID8gYXRvaShnZXRlbnYoIkNPTFVNTlMiKSkgOiA4MDsKKwlnQU5TSUVzY2FwZXMgPSAoZ2V0ZW52KCJURVJNIikgIT0gTlVMTCkgJiYgKHN0cnN0cihURVJNUywgZ2V0ZW52KCJURVJNIikpICE9IE5VTEwpOworCWdCdWYgPSAoY2hhciAqKSBtYWxsb2MoVEVYVF9CTE9DS19TSVpFKTsKKwlpZiAoZ0J1ZiA9PSBOVUxMKSAKKwkJZ290byBwYW5pYzsKKwlnTkJ1ZlVzZWQgPSAwOworCWdOQnVmQWxsb2NhdGVkID0gVEVYVF9CTE9DS19TSVpFOworCWlmIChzdHJsZW4oZ0FyZ3NTdHIpIDwgKGdOQnVmQWxsb2NhdGVkIC0gMSkpIHsKKwkJc3RyY3B5KGdCdWYsIGdBcmdzU3RyKTsKKwkJZ05CdWZVc2VkID0gc3RybGVuKGdBcmdzU3RyKTsKKwl9CisKKwlpZiAoaXNhdHR5KDEpKSB7CisJCWlmIChTbHVycFByb2dyZXNzKGZkKSA8IDApCisJCQlnb3RvIHBhbmljOworCX0gZWxzZSB7CisJCWlmIChTbHVycEFsbChmZCkgPCAwKQorCQkJZ290byBwYW5pYzsKKwl9CisJRHVtcEZvcm1hdHRlZE91dHB1dCgpOworCWV4aXQoZ0V4aXRTdGF0dXMpOworCitwYW5pYzoKKwlnRHVtcENtZEFyZ3MgPSAxOwkvKiBwcmludCBjbWQgd2hlbiB0aGVyZSBhcmUgZXJyb3JzICovCisJRHVtcEZvcm1hdHRlZE91dHB1dCgpOworCXdoaWxlICgobnJlYWQgPSByZWFkKGZkLCBlbWVyZywgKHNpemVfdCkgc2l6ZW9mKGVtZXJnKSkpID4gMCkKKwkJKHZvaWQpIHdyaXRlKDIsIGVtZXJnLCAoc2l6ZV90KSBucmVhZCk7CisJV2FpdCgpOworCWV4aXQoZ0V4aXRTdGF0dXMpOworfQkvKiBtYWluICovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L01ha2VmaWxlIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDhjYzFlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9NYWtlZmlsZQpAQCAtMCwwICsxLDIwIEBACitkZWZhdWx0OiBhbGwKKworY2VudHJpbm8tZGVjb2RlOiBjZW50cmluby1kZWNvZGUuYworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjZW50cmluby1kZWNvZGUgY2VudHJpbm8tZGVjb2RlLmMKKworZHVtcF9wc2I6IGR1bXBfcHNiLmMKKwkkKENDKSAkKENGTEFHUykgLW8gZHVtcF9wc2IgZHVtcF9wc2IuYworCitpbnRlbF9nc2ljOiBpbnRlbF9nc2ljLmMKKwkkKENDKSAkKENGTEFHUykgLW8gaW50ZWxfZ3NpYyAtbGxybWkgaW50ZWxfZ3NpYy5jCisKK3Bvd2Vybm93LWs4LWRlY29kZTogcG93ZXJub3ctazgtZGVjb2RlLmMKKwkkKENDKSAkKENGTEFHUykgLW8gcG93ZXJub3ctazgtZGVjb2RlIHBvd2Vybm93LWs4LWRlY29kZS5jCisKK2FsbDogY2VudHJpbm8tZGVjb2RlIGR1bXBfcHNiIGludGVsX2dzaWMgcG93ZXJub3ctazgtZGVjb2RlCisKK2NsZWFuOgorCXJtIC1yZiBjZW50cmluby1kZWNvZGUgZHVtcF9wc2IgaW50ZWxfZ3NpYyBwb3dlcm5vdy1rOC1kZWNvZGUKKworLlBIT05ZOiBhbGwgZGVmYXVsdCBjbGVhbgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9jZW50cmluby1kZWNvZGUuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvY2VudHJpbm8tZGVjb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VmMjRjYwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvY2VudHJpbm8tZGVjb2RlLmMKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiAgKEMpIDIwMDMgLSAyMDA0ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqIEJhc2VkIG9uIGNvZGUgZm91bmQgaW4KKyAqIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMKKyAqIGFuZCBvcmlnaW5hbGx5IGRldmVsb3BlZCBieSBKZXJlbXkgRml0emhhcmRpbmdlLgorICoKKyAqIFVTQUdFOiBzaW1wbHkgcnVuIGl0IHRvIGRlY29kZSB0aGUgY3VycmVudCBzZXR0aW5ncyBvbiBDUFUgMCwKKyAqCSAgb3IgcGFzcyB0aGUgQ1BVIG51bWJlciBhcyBhcmd1bWVudCwgb3IgcGFzcyB0aGUgTVNSIGNvbnRlbnQKKyAqCSAgYXMgYXJndW1lbnQuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2RlZmluZSBNQ1BVCTMyCisKKyNkZWZpbmUgTVNSX0lBMzJfUEVSRl9TVEFUVVMJMHgxOTgKKworc3RhdGljIGludCByZG1zcih1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbXNyLAorCQkgdW5zaWduZWQgaW50ICpsbywgdW5zaWduZWQgaW50ICpoaSkKK3sKKwlpbnQgZmQ7CisJY2hhciBmaWxlWzIwXTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCWludCByZXR2YWwgPSAtMTsKKworCSpsbyA9ICpoaSA9IDA7CisKKwlpZiAoY3B1ID4gTUNQVSkKKwkJZ290byBlcnIxOworCisJc3ByaW50ZihmaWxlLCAiL2Rldi9jcHUvJWQvbXNyIiwgY3B1KTsKKwlmZCA9IG9wZW4oZmlsZSwgT19SRE9OTFkpOworCisJaWYgKGZkIDwgMCkKKwkJZ290byBlcnIxOworCisJaWYgKGxzZWVrKGZkLCBtc3IsIFNFRUtfQ1VSKSA9PSAtMSkKKwkJZ290byBlcnIyOworCisJaWYgKHJlYWQoZmQsICZ2YWwsIDgpICE9IDgpCisJCWdvdG8gZXJyMjsKKworCSpsbyA9ICh1aW50MzJfdCApKHZhbCAmIDB4ZmZmZmZmZmZ1bGwpOworCSpoaSA9ICh1aW50MzJfdCApKHZhbD4+MzIgJiAweGZmZmZmZmZmdWxsKTsKKworCXJldHZhbCA9IDA7CitlcnIyOgorCWNsb3NlKGZkKTsKK2VycjE6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgZGVjb2RlICh1bnNpZ25lZCBpbnQgbXNyKQoreworCXVuc2lnbmVkIGludCBtdWx0aXBsaWVyOworCXVuc2lnbmVkIGludCBtdjsKKworCW11bHRpcGxpZXIgPSAoKG1zciA+PiA4KSAmIDB4RkYpOworCisJbXYgPSAoKChtc3IgJiAweEZGKSAqIDE2KSArIDcwMCk7CisKKwlwcmludGYoIjB4JXggbWVhbnMgbXVsdGlwbGllciAlZCBAICVkIG1WXG4iLCBtc3IsIG11bHRpcGxpZXIsIG12KTsKK30KKworc3RhdGljIGludCBkZWNvZGVfbGl2ZSh1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGludCBsbywgaGk7CisJaW50IGVycjsKKworCWVyciA9IHJkbXNyKGNwdSwgTVNSX0lBMzJfUEVSRl9TVEFUVVMsICZsbywgJmhpKTsKKworCWlmIChlcnIpIHsKKwkJcHJpbnRmKCJjYW4ndCBnZXQgTVNSX0lBMzJfUEVSRl9TVEFUVVMgZm9yIGNwdSAlZFxuIiwgY3B1KTsKKwkJcHJpbnRmKCJQb3NzaWJsZSB0cm91YmxlOiB5b3UgZG9uJ3QgcnVuIGFuIEVuaGFuY2VkIFNwZWVkU3RlcCBjYXBhYmxlIGNwdVxuIik7CisJCXByaW50Zigib3IgeW91IGFyZSBub3Qgcm9vdCwgb3IgdGhlIG1zciBkcml2ZXIgaXMgbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlkZWNvZGUobG8pOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgaW50IGNwdSwgbW9kZSA9IDA7CisKKwlpZiAoYXJnYyA8IDIpCisJCWNwdSA9IDA7CisJZWxzZSB7CisJCWNwdSA9IHN0cnRvdWwoYXJndlsxXSwgTlVMTCwgMCk7CisJCWlmIChjcHUgPj0gTUNQVSkKKwkJCW1vZGUgPSAxOworCX0KKworCWlmIChtb2RlKQorCQlkZWNvZGUoY3B1KTsKKwllbHNlCisJCWRlY29kZV9saXZlKGNwdSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvZHVtcF9wc2IuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvZHVtcF9wc2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDZhNDc1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9kdW1wX3BzYi5jCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogZHVtcF9wc2IuIChjKSAyMDA0LCBEYXZlIEpvbmVzLCBSZWQgSGF0IEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIuCisgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2RlZmluZSBfR05VX1NPVVJDRQorI2luY2x1ZGUgPGdldG9wdC5oPgorCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworI2RlZmluZSBMRU4gKDB4MTAwMDAwIC0gMHhjMDAwMCkKKyNkZWZpbmUgT0ZGU0VUICgweGMwMDAwKQorCisjaWZuZGVmIF9fcGFja2VkCisjZGVmaW5lIF9fcGFja2VkIF9fYXR0cmlidXRlKChwYWNrZWQpKQorI2VuZGlmCisKK3N0YXRpYyBsb25nIHJlbGV2YW50OworCitzdGF0aWMgY29uc3QgaW50IGZpZF90b19tdWx0WzMyXSA9IHsKKwkxMTAsIDExNSwgMTIwLCAxMjUsIDUwLCA1NSwgNjAsIDY1LAorCTcwLCA3NSwgODAsIDg1LCA5MCwgOTUsIDEwMCwgMTA1LAorCTMwLCAxOTAsIDQwLCAyMDAsIDEzMCwgMTM1LCAxNDAsIDIxMCwKKwkxNTAsIDIyNSwgMTYwLCAxNjUsIDE3MCwgMTgwLCAtMSwgLTEsCit9OworCitzdGF0aWMgY29uc3QgaW50IHZpZF90b192b2x0YWdlWzMyXSA9IHsKKwkyMDAwLCAxOTUwLCAxOTAwLCAxODUwLCAxODAwLCAxNzUwLCAxNzAwLCAxNjUwLAorCTE2MDAsIDE1NTAsIDE1MDAsIDE0NTAsIDE0MDAsIDEzNTAsIDEzMDAsIDAsCisJMTI3NSwgMTI1MCwgMTIyNSwgMTIwMCwgMTE3NSwgMTE1MCwgMTEyNSwgMTEwMCwKKwkxMDc1LCAxMDUwLCAxMDI0LCAxMDAwLCA5NzUsIDk1MCwgOTI1LCAwLAorfTsKKworc3RydWN0IHBzYl9oZWFkZXIgeworCWNoYXIgc2lnbmF0dXJlWzEwXTsKKwl1X2NoYXIgdmVyc2lvbjsKKwl1X2NoYXIgZmxhZ3M7CisJdV9zaG9ydCBzZXR0bGluZ3RpbWU7CisJdV9jaGFyIHJlczE7CisJdV9jaGFyIG51bXBzdDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwc3RfaGVhZGVyIHsKKwl1X2ludDMyX3QgY3B1aWQ7CisJdV9jaGFyIGZzYjsKKwl1X2NoYXIgbWF4ZmlkOworCXVfY2hhciBzdGFydHZpZDsKKwl1X2NoYXIgbnVtcHN0YXRlczsKK30gX19wYWNrZWQ7CisKK3N0YXRpYyB1X2ludCBmc2I7CitzdGF0aWMgdV9pbnQgc2d0YzsKKworc3RhdGljIGludAorZGVjb2RlX3BzdChjaGFyICpwLCBpbnQgbnBzdGF0ZXMpCit7CisJaW50IGk7CisJaW50IGZyZXEsIGZpZCwgdmlkOworCisJZm9yIChpID0gMDsgaSA8IG5wc3RhdGVzOyArK2kpIHsKKwkJZmlkID0gKnArKzsKKwkJdmlkID0gKnArKzsKKwkJZnJlcSA9IDEwMCAqIGZpZF90b19tdWx0W2ZpZF0gKiBmc2I7CisKKwkJcHJpbnRmKCIgICAlMmQgJThka0h6ICBGSUQgJTAyeCAoJTJkLiUwMWQpICBWSUQgJTAyeCAoJTRkbVYpXG4iLAorCQkgICAgICAgaSwKKwkJICAgICAgIGZyZXEsCisJCSAgICAgICBmaWQsIGZpZF90b19tdWx0W2ZpZF0vMTAsIGZpZF90b19tdWx0W2ZpZF0lMTAsCisJCSAgICAgICB2aWQsIHZpZF90b192b2x0YWdlW3ZpZF0pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMKK3ZvaWQgZGVjb2RlX3BzYihjaGFyICpwLCBpbnQgbnVtcHN0KQoreworCWludCBpOworCXN0cnVjdCBwc2JfaGVhZGVyICpwc2I7CisJc3RydWN0IHBzdF9oZWFkZXIgKnBzdDsKKworCXBzYiA9IChzdHJ1Y3QgcHNiX2hlYWRlciopIHA7CisKKwlpZiAocHNiLT52ZXJzaW9uICE9IDB4MTIpCisJCXJldHVybjsKKworCXByaW50ZigiUFNCIHZlcnNpb246ICVoaHggZmxhZ3M6ICVoaHggc2V0dGxpbmcgdGltZSAlaGh1dXMgcmVzMSAlaGh4IG51bSBwc3QgJWhodVxuIiwKKwkJCXBzYi0+dmVyc2lvbiwKKwkJCXBzYi0+ZmxhZ3MsCisJCQlwc2ItPnNldHRsaW5ndGltZSwKKwkJCXBzYi0+cmVzMSwKKwkJCXBzYi0+bnVtcHN0KTsKKwlzZ3RjID0gcHNiLT5zZXR0bGluZ3RpbWUgKiAxMDA7CisKKwlpZiAoc2d0YyA8IDEwMDAwKQorCQlzZ3RjID0gMTAwMDA7CisKKwlwID0gKChjaGFyICopIHBzYikgKyBzaXplb2Yoc3RydWN0IHBzYl9oZWFkZXIpOworCisJaWYgKG51bXBzdCA8IDApCisJCW51bXBzdCA9IHBzYi0+bnVtcHN0OworCWVsc2UKKwkJcHJpbnRmKCJPdmVycmlkaW5nIG51bWJlciBvZiBwc3QgOiVkXG4iLCBudW1wc3QpOworCisJZm9yIChpID0gMDsgaSA8IG51bXBzdDsgaSsrKSB7CisJCXBzdCA9IChzdHJ1Y3QgcHN0X2hlYWRlciopIHA7CisKKwkJaWYgKHJlbGV2YW50ICE9IDApIHsKKwkJCWlmIChyZWxldmFudCE9IHBzdC0+Y3B1aWQpCisJCQkJZ290byBuZXh0X29uZTsKKwkJfQorCisJCXByaW50ZigiICBQU1QgJWQgIGNwdWlkICUuM3ggZnNiICVoaHUgbWZpZCAlaGh4IHN2aWQgJWhoeCBudW1iZXJzdGF0ZXMgJWhodVxuIiwKKwkJCQlpKzEsCisJCQkJcHN0LT5jcHVpZCwKKwkJCQlwc3QtPmZzYiwKKwkJCQlwc3QtPm1heGZpZCwKKwkJCQlwc3QtPnN0YXJ0dmlkLAorCQkJCXBzdC0+bnVtcHN0YXRlcyk7CisKKwkJZnNiID0gcHN0LT5mc2I7CisJCWRlY29kZV9wc3QocCArIHNpemVvZihzdHJ1Y3QgcHN0X2hlYWRlciksIHBzdC0+bnVtcHN0YXRlcyk7CisKK25leHRfb25lOgorCQlwICs9IHNpemVvZihzdHJ1Y3QgcHN0X2hlYWRlcikgKyAyKnBzdC0+bnVtcHN0YXRlczsKKwl9CisKK30KKworc3RhdGljIHN0cnVjdCBvcHRpb24gaW5mb19vcHRzW10gPSB7CisJey5uYW1lID0gIm51bXBzdCIsCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkuZmxhZz1OVUxMLCAudmFsPSduJ30sCit9OworCit2b2lkIHByaW50X2hlbHAodm9pZCkKK3sKKwlwcmludGYgKCJVc2FnZTogZHVtcF9wc2IgW29wdGlvbnNdXG4iKTsKKwlwcmludGYgKCJPcHRpb25zOlxuIik7CisJcHJpbnRmICgiICAtbiwgLS1udW1wc3QgICAgIFNldCBudW1iZXIgb2YgUFNUIHRhYmxlcyB0byBzY2FuXG4iKTsKKwlwcmludGYgKCIgIC1yLCAtLXJlbGV2YW50ICAgT25seSBkaXNwbGF5IFBTVHMgcmVsZXZhbnQgdG8gY3B1aWQgTlxuIik7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCBmZDsKKwlpbnQgbnVtcHN0PS0xOworCWludCByZXQ9MCwgY29udD0xOworCWNoYXIgKm1lbSA9IE5VTEw7CisJY2hhciAqcDsKKworCWRvIHsKKwkJcmV0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImhyOm46IiwgaW5mb19vcHRzLCBOVUxMKTsKKwkJc3dpdGNoIChyZXQpeworCQljYXNlICc/JzoKKwkJY2FzZSAnaCc6CisJCQlwcmludF9oZWxwKCk7CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdyJzoKKwkJCXJlbGV2YW50ID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMTYpOworCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJbnVtcHN0ID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMTApOworCQkJYnJlYWs7CisJCWNhc2UgLTE6CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwl9IHdoaWxlKGNvbnQpOworCisJZmQgPSBvcGVuKCIvZGV2L21lbSIsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKSB7CisJCXByaW50ZiAoIkNvdWxkbid0IG9wZW4gL2Rldi9tZW0uIEFyZSB5b3Ugcm9vdD9cbiIpOworCQlleGl0KDEpOworCX0KKworCW1lbSA9IG1tYXAobWVtLCAweDEwMDAwMCAtIDB4YzAwMDAsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZmQsIDB4YzAwMDApOworCWNsb3NlKGZkKTsKKworCWZvciAocCA9IG1lbTsgcCAtIG1lbSA8IExFTjsgcCs9MTYpIHsKKwkJaWYgKG1lbWNtcChwLCAiQU1ESzdQTk9XISIsIDEwKSA9PSAwKSB7CisJCQlkZWNvZGVfcHNiKHAsIG51bXBzdCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCW11bm1hcChtZW0sIExFTik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L2ludGVsX2dzaWMuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvaW50ZWxfZ3NpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZjUyOTMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L2ludGVsX2dzaWMuYwpAQCAtMCwwICsxLDc4IEBACisvKgorICogIChDKSAyMDAzICBCcnVubyBEdWNyb3QKKyAqICAoQykgMjAwNCAgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kuZGU+CisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZvdW5kIGluCisgKiBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L2lzdC5oIGFuZCBsaW51eC9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKKyAqIGFuZCBvcmlnaW5hbGx5IGRldmVsb3BlZCBieSBBbmR5IEdyb3ZlciA8YW5kcmV3Lmdyb3ZlckBpbnRlbC5jb20+CisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bHJtaS5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKwlzdHJ1Y3QgTFJNSV9yZWdzCXI7CisJaW50CQkJcmV0dmFsOworCisJaWYgKCFMUk1JX2luaXQoKSkKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQoJnIsIDAsIHNpemVvZihyKSk7CisKKwlyLmVheCA9IDB4MDAwMEU5ODA7CisJci5lZHggPSAweDQ3NTM0OTQzOworCisJcmV0dmFsID0gTFJNSV9pbnQoMHgxNSwgJnIpOworCisJaWYgKCFyZXR2YWwpIHsKKwkJcHJpbnRmKCJGYWlsZWQhXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChyLmVheCA9PSAweDQ3NTM0OTQzKSB7CisJCXByaW50ZigiQklPUyBzdXBwb3J0cyBHU0lDIGNhbGw6XG4iKTsKKwkJcHJpbnRmKCJcdHNpZ25hdHVyZTogJWMlYyVjJWNcbiIsCisJCSAgICAgICAoci5lYXggPj4gMjQpICYgMHhmZiwKKwkJICAgICAgIChyLmVheCA+PiAxNikgJiAweGZmLAorCQkgICAgICAgKHIuZWF4ID4+IDgpICYgMHhmZiwKKwkJICAgICAgIChyLmVheCkgJiAweGZmKTsKKwkJcHJpbnRmKCJcdGNvbW1hbmQgcG9ydCA9IDB4JS40eFxuIiwKKwkJICAgICAgIHIuZWJ4ICYgMHhmZmZmKTsKKwkJcHJpbnRmKCJcdGNvbW1hbmQgPSAgICAgIDB4JS40eFxuIiwKKwkJICAgICAgIChyLmVieCA+PiAxNikgJiAweGZmZmYpOworCQlwcmludGYoIlx0ZXZlbnQgcG9ydCA9ICAgMHglLjh4XG4iLCByLmVjeCk7CisJCXByaW50ZigiXHRmbGFncyA9ICAgICAgICAweCUuOHhcbiIsIHIuZWR4KTsKKwkJaWYgKCgoci5lYnggPj4gMTYpICYgMHhmZmZmKSAhPSAweDgyKSB7CisJCQlwcmludGYoIm5vbi1kZWZhdWx0IGNvbW1hbmQgdmFsdWUuIElmIHNwZWVkc3RlcC1zbWkgIgorCQkJICAgICAgICJkb2Vzbid0IHdvcmsgb3V0IG9mIHRoZSBib3gsXG55b3UgbWF5IHdhbnQgdG8gIgorCQkJICAgICAgICJ0cnkgb3V0IHRoZSBkZWZhdWx0IHZhbHVlIGJ5IHBhc3NpbmcgIgorCQkJICAgICAgICJzbWlfY21kPTB4ODIgdG8gdGhlIG1vZHVsZVxuIE9OIFlPVVIgT1dOICIKKwkJCSAgICAgICAiUklTSy5cbiIpOworCQl9CisJCWlmICgoci5lYnggJiAweGZmZmYpICE9IDB4YjIpIHsKKwkJCXByaW50Zigibm9uLWRlZmF1bHQgY29tbWFuZCBwb3J0LiBJZiBzcGVlZHN0ZXAtc21pICIKKwkJCSAgICAgICAiZG9lc24ndCB3b3JrIG91dCBvZiB0aGUgYm94LFxueW91IG1heSB3YW50IHRvICIKKwkJCSAgICAgICAidHJ5IG91dCB0aGUgZGVmYXVsdCB2YWx1ZSBieSBwYXNzaW5nICIKKwkJCSAgICAgICAic21pX3BvcnQ9MHg4MiB0byB0aGUgbW9kdWxlXG4gT04gWU9VUiBPV04gIgorCQkJICAgICAgICJSSVNLLlxuIik7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGYoIkJJT1MgRE9FUyBOT1Qgc3VwcG9ydCBHU0lDIGNhbGwuICBEdW1waW5nIHJlZ2lzdGVycyBhbnl3YXk6XG4iKTsKKwkJcHJpbnRmKCJlYXggPSAweCUuOHhcbiIsIHIuZWF4KTsKKwkJcHJpbnRmKCJlYnggPSAweCUuOHhcbiIsIHIuZWJ4KTsKKwkJcHJpbnRmKCJlY3ggPSAweCUuOHhcbiIsIHIuZWN4KTsKKwkJcHJpbnRmKCJlZHggPSAweCUuOHhcbiIsIHIuZWR4KTsKKwkJcHJpbnRmKCJOb3RlIGFsc28gdGhhdCBzb21lIEJJT1MgZG8gbm90IHN1cHBvcnQgdGhlIGluaXRpYWwgIgorCQkgICAgICAgIkdTSUMgY2FsbCwgYnV0IHRoZSBuZXdlclxuc3BlZWVkc3RlcC1zbWkgZHJpdmVyIG1heSAiCisJCSAgICAgICAid29yay5cbkZvciB0aGlzLCB5b3UgbmVlZCB0byBwYXNzIHNvbWUgYXJndW1lbnRzIHRvICIKKwkJICAgICAgICJ0aGUgc3BlZWRzdGVwLXNtaSBkcml2ZXI6XG4iKTsKKwkJcHJpbnRmKCJcdHNtaV9jbWQ9MHg/PyBzbWlfcG9ydD0weD8/IHNtaV9zaWc9MVxuIik7CisJCXByaW50ZigiXG5VbmZvcnR1bmF0ZWx5LCB5b3UgaGF2ZSB0byBrbm93IHdoYXQgZXhhY3RseSBhcmUgIgorCQkgICAgICAgInNtaV9jbWQgYW5kIHNtaV9wb3J0LCBhbmQgdGhpc1xuaXMgc3lzdGVtICIKKwkJICAgICAgICJkZXBlbmRhbnQuXG4iKTsKKwl9CisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L3Bvd2Vybm93LWs4LWRlY29kZS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9wb3dlcm5vdy1rOC1kZWNvZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzhhNmIzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9wb3dlcm5vdy1rOC1kZWNvZGUuYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogIChDKSAyMDA0IEJydW5vIER1Y3JvdCA8ZHVjcm90QHBvdXBpbm91Lm9yZz4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqIEJhc2VkIG9uIGNvZGUgZm91bmQgaW4KKyAqIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworICogYW5kIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5IFBhdWwgRGV2cmllbmR0CisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2RlZmluZSBNQ1BVIDMyCisKKyNkZWZpbmUgTVNSX0ZJRFZJRF9TVEFUVVMJMHhjMDAxMDA0MgorCisjZGVmaW5lIE1TUl9TX0hJX0NVUlJFTlRfVklECTB4MDAwMDAwMWYKKyNkZWZpbmUgTVNSX1NfTE9fQ1VSUkVOVF9GSUQJMHgwMDAwMDAzZgorCitzdGF0aWMgaW50IGdldF9maWR2aWQodWludDMyX3QgY3B1LCB1aW50MzJfdCAqZmlkLCB1aW50MzJfdCAqdmlkKQoreworCWludCBlcnIgPSAxOworCXVpbnQ2NF90IG1zciA9IDA7CisJaW50IGZkOworCWNoYXIgZmlsZVsyMF07CisKKwlpZiAoY3B1ID4gTUNQVSkKKwkJZ290byBvdXQ7CisKKwlzcHJpbnRmKGZpbGUsICIvZGV2L2NwdS8lZC9tc3IiLCBjcHUpOworCisJZmQgPSBvcGVuKGZpbGUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlnb3RvIG91dDsKKwlsc2VlayhmZCwgTVNSX0ZJRFZJRF9TVEFUVVMsIFNFRUtfQ1VSKTsKKwlpZiAocmVhZChmZCwgJm1zciwgOCkgIT0gOCkKKwkJZ290byBlcnIxOworCisJKmZpZCA9ICgodWludDMyX3QgKShtc3IgJiAweGZmZmZmZmZmdWxsKSkgJiBNU1JfU19MT19DVVJSRU5UX0ZJRDsKKwkqdmlkID0gKCh1aW50MzJfdCApKG1zcj4+MzIgJiAweGZmZmZmZmZmdWxsKSkgJiBNU1JfU19ISV9DVVJSRU5UX1ZJRDsKKwllcnIgPSAwOworZXJyMToKKwljbG9zZShmZCk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworCisvKiBSZXR1cm4gYSBmcmVxdWVuY3kgaW4gTUh6LCBnaXZlbiBhbiBpbnB1dCBmaWQgKi8KK3N0YXRpYyB1aW50MzJfdCBmaW5kX2ZyZXFfZnJvbV9maWQodWludDMyX3QgZmlkKQoreworCXJldHVybiA4MDAgKyAoZmlkICogMTAwKTsKK30KKworLyogUmV0dXJuIGEgdm9sdGFnZSBpbiBtaWxpVm9sdHMsIGdpdmVuIGFuIGlucHV0IHZpZCAqLworc3RhdGljIHVpbnQzMl90IGZpbmRfbWlsbGl2b2x0c19mcm9tX3ZpZCh1aW50MzJfdCB2aWQpCit7CisJcmV0dXJuIDE1NTAtdmlkKjI1OworfQorCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgZXJyOworCWludCBjcHU7CisJdWludDMyX3QgZmlkLCB2aWQ7CisKKwlpZiAoYXJnYyA8IDIpCisJCWNwdSA9IDA7CisJZWxzZQorCQljcHUgPSBzdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDApOworCisJZXJyID0gZ2V0X2ZpZHZpZChjcHUsICZmaWQsICZ2aWQpOworCisJaWYgKGVycikgeworCQlwcmludGYoImNhbid0IGdldCBmaWQsIHZpZCBmcm9tIE1TUlxuIik7CisJCXByaW50ZigiUG9zc2libGUgdHJvdWJsZTogeW91IGRvbid0IHJ1biBhIHBvd2Vybm93LWs4IGNhcGFibGUgY3B1XG4iKTsKKwkJcHJpbnRmKCJvciB5b3UgYXJlIG5vdCByb290LCBvciB0aGUgbXNyIGRyaXZlciBpcyBub3QgcHJlc2VudFxuIik7CisJCWV4aXQoMSk7CisJfQorCisJCisJcHJpbnRmKCJjcHUgJWQgY3VycmVudGx5IGF0ICVkIE1IeiBhbmQgJWQgbVZcbiIsCisJCQljcHUsCisJCQlmaW5kX2ZyZXFfZnJvbV9maWQoZmlkKSwKKwkJCWZpbmRfbWlsbGl2b2x0c19mcm9tX3ZpZCh2aWQpKTsKKwkKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2tlcm5lbC9NYWtlZmlsZSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2tlcm5lbC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmIxNDZmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcva2VybmVsL01ha2VmaWxlCkBAIC0wLDAgKzEsMjMgQEAKK29iai1tCTo9CisKK0tESVIJOj0gL2xpYi9tb2R1bGVzLyQoc2hlbGwgdW5hbWUgLXIpL2J1aWxkCitQV0QJCTo9ICQoc2hlbGwgcHdkKQorS01JU0MgICA6PSAvbGliL21vZHVsZXMvJChzaGVsbCB1bmFtZSAtcikvY3B1ZnJlcXV0aWxzLworCitpZmVxICgiJChDT05GSUdfWDg2X1RTQykiLCAieSIpCisgIG9iai1tCSArPSBjcHVmcmVxLXRlc3RfdHNjLm8KK2VuZGlmCisKK2RlZmF1bHQ6CisJJChNQUtFKSAtQyAkKEtESVIpIE09JChQV0QpCisKK2NsZWFuOgorCS0gcm0gLXJmICoubyAqLmtvIC50bXAtdmVyc2lvbnMgLiouY21kIC4qLm1vZC4qICoubW9kLmMKKwktIHJtIC1yZiAudG1wX3ZlcnNpb25zKiBNb2R1bGUuc3ltdmVycyBtb2R1bGVzLm9yZGVyCisKK2luc3RhbGw6IGRlZmF1bHQKKwlpbnN0YWxsIC1kICQoS01JU0MpCisJaW5zdGFsbCAtbSA2NDQgLWMgKi5rbyAkKEtNSVNDKQorCS9zYmluL2RlcG1vZCAtYQorCithbGw6CWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2tlcm5lbC9jcHVmcmVxLXRlc3RfdHNjLmMgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9rZXJuZWwvY3B1ZnJlcS10ZXN0X3RzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2Y2FjZTYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9rZXJuZWwvY3B1ZnJlcS10ZXN0X3RzYy5jCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogdGVzdCBtb2R1bGUgdG8gY2hlY2sgd2hldGhlciB0aGUgVFNDLWJhc2VkIGRlbGF5IHJvdXRpbmUgY29udGludWVzCisgKiB0byB3b3JrIHByb3Blcmx5IGFmdGVyIGNwdWZyZXEgdHJhbnNpdGlvbnMuIE5lZWRzIEFDUEkgdG8gd29yaworICogcHJvcGVybHkuCisgKgorICogQmFzZWQgcGFydGx5IG9uIHRoZSBQb3dlciBNYW5hZ2VtZW50IFRpbWVyIChQTVRNUikgY29kZSB0byBiZSBmb3VuZAorICogaW4gYXJjaC9pMzg2L2tlcm5lbC90aW1lcnMvdGltZXJfcG0uYyBvbiByZWNlbnQgMi42LiBrZXJuZWxzLCBlc3BlY2lhbGx5CisgKiBjb2RlIHdyaXR0ZW4gYnkgSm9obiBTdHVsdHouIFRoZSByZWFkX3BtdG1yIGZ1bmN0aW9uIHdhcyBjb3BpZWQgdmVyYmF0aW0KKyAqIGZyb20gdGhhdCBmaWxlLgorICoKKyAqIChDKSAyMDA0IERvbWluaWsgQnJvZG93c2tpCisgKgorICogVG8gdXNlOgorICogMS4pIHBhc3MgY2xvY2s9dHNjIHRvIHRoZSBrZXJuZWwgb24geW91ciBib290bG9hZGVyCisgKiAyLikgbW9kcHJvYmUgdGhpcyBtb2R1bGUgKGl0J2xsIGZhaWwpCisgKiAzLikgY2hhbmdlIENQVSBmcmVxdWVuY3kKKyAqIDQuKSBtb2Rwcm9iZSB0aGlzIG1vZHVsZSBhZ2FpbgorICogNS4pIGlmIHRoZSB0aGlyZCB2YWx1ZSwgImRpZmZfcG10bXIiLCBjaGFuZ2VzIGJldHdlZW4gMi4gYW5kIDQuLCB0aGUKKyAqICAgICBUU0MtYmFzZWQgZGVsYXkgcm91dGluZSBvbiB0aGUgTGludXgga2VybmVsIGRvZXMgbm90IGNvcnJlY3RseQorICogICAgIGhhbmRsZSB0aGUgY3B1ZnJlcSB0cmFuc2l0aW9uLiBQbGVhc2UgcmVwb3J0IHRoaXMgdG8KKyAqICAgICBjcHVmcmVxQHZnZXIua2VybmVsLm9yZworICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CisKK3N0YXRpYyBpbnQgcG1fdG1yX2lvcG9ydCA9IDA7CisKKy8qaGVscGVyIGZ1bmN0aW9uIHRvIHNhZmVseSByZWFkIGFjcGkgcG0gdGltZXNvdXJjZSovCitzdGF0aWMgdTMyIHJlYWRfcG10bXIodm9pZCkKK3sKKwl1MzIgdjE9MCx2Mj0wLHYzPTA7CisJLyogSXQgaGFzIGJlZW4gcmVwb3J0ZWQgdGhhdCBiZWNhdXNlIG9mIHZhcmlvdXMgYnJva2VuCisJICogY2hpcHNldHMgKElDSDQsIFBJSVg0IGFuZCBQSUlYNEUpIHdoZXJlIHRoZSBBQ1BJIFBNIHRpbWUKKwkgKiBzb3VyY2UgaXMgbm90IGxhdGNoZWQsIHNvIHlvdSBtdXN0IHJlYWQgaXQgbXVsdGlwbGUKKwkgKiB0aW1lcyB0byBpbnN1cmUgYSBzYWZlIHZhbHVlIGlzIHJlYWQuCisJICovCisJZG8geworCQl2MSA9IGlubChwbV90bXJfaW9wb3J0KTsKKwkJdjIgPSBpbmwocG1fdG1yX2lvcG9ydCk7CisJCXYzID0gaW5sKHBtX3Rtcl9pb3BvcnQpOworCX0gd2hpbGUgKCh2MSA+IHYyICYmIHYxIDwgdjMpIHx8ICh2MiA+IHYzICYmIHYyIDwgdjEpCisJCSB8fCAodjMgPiB2MSAmJiB2MyA8IHYyKSk7CisKKwkvKiBtYXNrIHRoZSBvdXRwdXQgdG8gMjQgYml0cyAqLworCXJldHVybiAodjIgJiAweEZGRkZGRik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNwdWZyZXFfdGVzdF90c2Modm9pZCkKK3sKKwl1MzIgbm93LCB0aGVuLCBkaWZmOworCXU2NCBub3dfdHNjLCB0aGVuX3RzYywgZGlmZl90c2M7CisJaW50IGk7CisKKwkvKiB0aGUgZm9sbG93aW5nIGNvZGUgc25pcHBlZCBpcyBjb3BpZWQgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKKwkgICBvZiBMaW51eCB2Mi42LjI1LiAqLworCisJLyogZGV0ZWN0IHRoZSBsb2NhdGlvbiBvZiB0aGUgQUNQSSBQTSBUaW1lciAqLworCWlmIChhY3BpX2dibF9GQURULmhlYWRlci5yZXZpc2lvbiA+PSBGQURUMl9SRVZJU0lPTl9JRCkgeworCQkvKiBGQURUIHJldi4gMiAqLworCQlpZiAoYWNwaV9nYmxfRkFEVC54cG1fdGltZXJfYmxvY2suc3BhY2VfaWQgIT0KKwkJICAgIEFDUElfQURSX1NQQUNFX1NZU1RFTV9JTykKKwkJCXJldHVybiAwOworCisJCXBtX3Rtcl9pb3BvcnQgPSBhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jay5hZGRyZXNzOworCQkvKgorCQkgKiAiWCIgZmllbGRzIGFyZSBvcHRpb25hbCBleHRlbnNpb25zIHRvIHRoZSBvcmlnaW5hbCBWMS4wCisJCSAqIGZpZWxkcywgc28gd2UgbXVzdCBzZWxlY3RpdmVseSBleHBhbmQgVjEuMCBmaWVsZHMgaWYgdGhlCisJCSAqIGNvcnJlc3BvbmRpbmcgWCBmaWVsZCBpcyB6ZXJvLgorCSAJICovCisJCWlmICghcG1fdG1yX2lvcG9ydCkKKwkJCXBtX3Rtcl9pb3BvcnQgPSBhY3BpX2dibF9GQURULnBtX3RpbWVyX2Jsb2NrOworCX0gZWxzZSB7CisJCS8qIEZBRFQgcmV2LiAxICovCisJCXBtX3Rtcl9pb3BvcnQgPSBhY3BpX2dibF9GQURULnBtX3RpbWVyX2Jsb2NrOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJzdGFydC0tPiBcbiIpOworCXRoZW4gPSByZWFkX3BtdG1yKCk7CisgICAgICAgIHJkdHNjbGwodGhlbl90c2MpOworCWZvciAoaT0wO2k8MjA7aSsrKSB7CisJCW1kZWxheSgxMDApOworCQlub3cgPSByZWFkX3BtdG1yKCk7CisJCXJkdHNjbGwobm93X3RzYyk7CisJCWRpZmYgPSAobm93IC0gdGhlbikgJiAweEZGRkZGRjsKKwkJZGlmZl90c2MgPSBub3dfdHNjIC0gdGhlbl90c2M7CisJCXByaW50ayhLRVJOX0RFQlVHICJ0MTogJTA4dSB0MjogJTA4dSBkaWZmX3BtdG1yOiAlMDh1IGRpZmZfdHNjOiAlMDE2bGx1XG4iLCB0aGVuLCBub3csIGRpZmYsIGRpZmZfdHNjKTsKKwkJdGhlbiA9IG5vdzsKKwkJdGhlbl90c2MgPSBub3dfdHNjOworCX0KKwlwcmludGsoS0VSTl9ERUJVRyAiPC0tIGVuZCBcbiIpOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3B1ZnJlcV9ub25lKHZvaWQpCit7CisJcmV0dXJuOworfQorCittb2R1bGVfaW5pdChjcHVmcmVxX3Rlc3RfdHNjKQorbW9kdWxlX2V4aXQoY3B1ZnJlcV9ub25lKQorCisKK01PRFVMRV9BVVRIT1IoIkRvbWluaWsgQnJvZG93c2tpIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlZlcmlmeSB0aGUgVFNDIGNwdWZyZXEgbm90aWZpZXIgd29ya2luZyBjb3JyZWN0bHkgLS0gbmVlZHMgQUNQSS1lbmFibGVkIHN5c3RlbSIpOworTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL3g4Nl82NC9NYWtlZmlsZSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL3g4Nl82NC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmYxMzk5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcveDg2XzY0L01ha2VmaWxlCkBAIC0wLDAgKzEsMTQgQEAKK2RlZmF1bHQ6IGFsbAorCitjZW50cmluby1kZWNvZGU6IGNlbnRyaW5vLWRlY29kZS5jCisJJChDQykgJChDRkxBR1MpIC1vIGNlbnRyaW5vLWRlY29kZSBjZW50cmluby1kZWNvZGUuYworCitwb3dlcm5vdy1rOC1kZWNvZGU6IHBvd2Vybm93LWs4LWRlY29kZS5jCisJJChDQykgJChDRkxBR1MpIC1vIHBvd2Vybm93LWs4LWRlY29kZSBwb3dlcm5vdy1rOC1kZWNvZGUuYworCithbGw6IGNlbnRyaW5vLWRlY29kZSBwb3dlcm5vdy1rOC1kZWNvZGUKKworY2xlYW46CisJcm0gLXJmIGNlbnRyaW5vLWRlY29kZSBwb3dlcm5vdy1rOC1kZWNvZGUKKworLlBIT05ZOiBhbGwgZGVmYXVsdCBjbGVhbgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcveDg2XzY0L2NlbnRyaW5vLWRlY29kZS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcveDg2XzY0L2NlbnRyaW5vLWRlY29kZS5jCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjI2ZmIzZjEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy94ODZfNjQvY2VudHJpbm8tZGVjb2RlLmMKQEAgLTAsMCArMSBAQAorLi4vaTM4Ni9jZW50cmluby1kZWNvZGUuYwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL3g4Nl82NC9wb3dlcm5vdy1rOC1kZWNvZGUuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL3g4Nl82NC9wb3dlcm5vdy1rOC1kZWNvZGUuYwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5lYjMwYzc5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcveDg2XzY0L3Bvd2Vybm93LWs4LWRlY29kZS5jCkBAIC0wLDAgKzEgQEAKKy4uL2kzODYvcG93ZXJub3ctazgtZGVjb2RlLmMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9saWIvY3B1ZnJlcS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL2NwdWZyZXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTdkOGM1N2I0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL2NwdWZyZXEuYwpAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqICAoQykgMjAwNC0yMDA5ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImNwdWZyZXEuaCIKKyNpbmNsdWRlICJzeXNmcy5oIgorCitpbnQgY3B1ZnJlcV9jcHVfZXhpc3RzKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2NwdV9leGlzdHMoY3B1KTsKK30KKwordW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF9mcmVxX2tlcm5lbCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19nZXRfZnJlcV9rZXJuZWwoY3B1KTsKK30KKwordW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF9mcmVxX2hhcmR3YXJlKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX2hhcmR3YXJlKGNwdSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgY3B1ZnJlcV9nZXRfdHJhbnNpdGlvbl9sYXRlbmN5KHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX3RyYW5zaXRpb25fbGF0ZW5jeShjcHUpOworfQorCitpbnQgY3B1ZnJlcV9nZXRfaGFyZHdhcmVfbGltaXRzKHVuc2lnbmVkIGludCBjcHUsCisJCQkJdW5zaWduZWQgbG9uZyAqbWluLAorCQkJCXVuc2lnbmVkIGxvbmcgKm1heCkKK3sKKwlpZiAoKCFtaW4pIHx8ICghbWF4KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX2hhcmR3YXJlX2xpbWl0cyhjcHUsIG1pbiwgbWF4KTsKK30KKworY2hhciAqIGNwdWZyZXFfZ2V0X2RyaXZlcih1bnNpZ25lZCBpbnQgY3B1KSB7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX2RyaXZlcihjcHUpOworfQorCit2b2lkIGNwdWZyZXFfcHV0X2RyaXZlcihjaGFyICogcHRyKSB7CisJaWYgKCFwdHIpCisJCXJldHVybjsKKwlmcmVlKHB0cik7Cit9CisKK3N0cnVjdCBjcHVmcmVxX3BvbGljeSAqIGNwdWZyZXFfZ2V0X3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1KSB7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX3BvbGljeShjcHUpOworfQorCit2b2lkIGNwdWZyZXFfcHV0X3BvbGljeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkgeworCWlmICgoIXBvbGljeSkgfHwgKCFwb2xpY3ktPmdvdmVybm9yKSkKKwkJcmV0dXJuOworCisJZnJlZShwb2xpY3ktPmdvdmVybm9yKTsKKwlwb2xpY3ktPmdvdmVybm9yID0gTlVMTDsKKwlmcmVlKHBvbGljeSk7Cit9CisKK3N0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKiBjcHVmcmVxX2dldF9hdmFpbGFibGVfZ292ZXJub3JzKHVuc2lnbmVkIGludCBjcHUpIHsKKwlyZXR1cm4gc3lzZnNfZ2V0X2ZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyhjcHUpOworfQorCit2b2lkIGNwdWZyZXFfcHV0X2F2YWlsYWJsZV9nb3Zlcm5vcnMoc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqYW55KSB7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqdG1wLCAqbmV4dDsKKworCWlmICghYW55KQorCQlyZXR1cm47CisKKwl0bXAgPSBhbnktPmZpcnN0OworCXdoaWxlICh0bXApIHsKKwkJbmV4dCA9IHRtcC0+bmV4dDsKKwkJaWYgKHRtcC0+Z292ZXJub3IpCisJCQlmcmVlKHRtcC0+Z292ZXJub3IpOworCQlmcmVlKHRtcCk7CisJCXRtcCA9IG5leHQ7CisJfQorfQorCisKK3N0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqIGNwdWZyZXFfZ2V0X2F2YWlsYWJsZV9mcmVxdWVuY2llcyh1bnNpZ25lZCBpbnQgY3B1KSB7CisJcmV0dXJuIHN5c2ZzX2dldF9hdmFpbGFibGVfZnJlcXVlbmNpZXMoY3B1KTsKK30KKwordm9pZCBjcHVmcmVxX3B1dF9hdmFpbGFibGVfZnJlcXVlbmNpZXMoc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICphbnkpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgKnRtcCwgKm5leHQ7CisKKwlpZiAoIWFueSkKKwkJcmV0dXJuOworCisJdG1wID0gYW55LT5maXJzdDsKKwl3aGlsZSAodG1wKSB7CisJCW5leHQgPSB0bXAtPm5leHQ7CisJCWZyZWUodG1wKTsKKwkJdG1wID0gbmV4dDsKKwl9Cit9CisKKworc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqIGNwdWZyZXFfZ2V0X2FmZmVjdGVkX2NwdXModW5zaWduZWQgaW50IGNwdSkgeworCXJldHVybiBzeXNmc19nZXRfZnJlcV9hZmZlY3RlZF9jcHVzKGNwdSk7Cit9CisKK3ZvaWQgY3B1ZnJlcV9wdXRfYWZmZWN0ZWRfY3B1cyhzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICphbnkpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICp0bXAsICpuZXh0OworCisJaWYgKCFhbnkpCisJCXJldHVybjsKKworCXRtcCA9IGFueS0+Zmlyc3Q7CisJd2hpbGUgKHRtcCkgeworCQluZXh0ID0gdG1wLT5uZXh0OworCQlmcmVlKHRtcCk7CisJCXRtcCA9IG5leHQ7CisJfQorfQorCisKK3N0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKiBjcHVmcmVxX2dldF9yZWxhdGVkX2NwdXModW5zaWduZWQgaW50IGNwdSkgeworCXJldHVybiBzeXNmc19nZXRfZnJlcV9yZWxhdGVkX2NwdXMoY3B1KTsKK30KKwordm9pZCBjcHVmcmVxX3B1dF9yZWxhdGVkX2NwdXMoc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqYW55KSB7CisJY3B1ZnJlcV9wdXRfYWZmZWN0ZWRfY3B1cyhhbnkpOworfQorCisKK2ludCBjcHVmcmVxX3NldF9wb2xpY3kodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpIHsKKwlpZiAoIXBvbGljeSB8fCAhKHBvbGljeS0+Z292ZXJub3IpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBzeXNmc19zZXRfZnJlcV9wb2xpY3koY3B1LCBwb2xpY3kpOworfQorCisKK2ludCBjcHVmcmVxX21vZGlmeV9wb2xpY3lfbWluKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbWluX2ZyZXEpIHsKKwlyZXR1cm4gc3lzZnNfbW9kaWZ5X2ZyZXFfcG9saWN5X21pbihjcHUsIG1pbl9mcmVxKTsKK30KKworCitpbnQgY3B1ZnJlcV9tb2RpZnlfcG9saWN5X21heCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIG1heF9mcmVxKSB7CisJcmV0dXJuIHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9tYXgoY3B1LCBtYXhfZnJlcSk7Cit9CisKKworaW50IGNwdWZyZXFfbW9kaWZ5X3BvbGljeV9nb3Zlcm5vcih1bnNpZ25lZCBpbnQgY3B1LCBjaGFyICpnb3Zlcm5vcikgeworCWlmICgoIWdvdmVybm9yKSB8fCAoc3RybGVuKGdvdmVybm9yKSA+IDE5KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3lzZnNfbW9kaWZ5X2ZyZXFfcG9saWN5X2dvdmVybm9yKGNwdSwgZ292ZXJub3IpOworfQorCitpbnQgY3B1ZnJlcV9zZXRfZnJlcXVlbmN5KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X2ZyZXF1ZW5jeSkgeworCXJldHVybiBzeXNmc19zZXRfZnJlcXVlbmN5KGNwdSwgdGFyZ2V0X2ZyZXF1ZW5jeSk7Cit9CisKK3N0cnVjdCBjcHVmcmVxX3N0YXRzICogY3B1ZnJlcV9nZXRfc3RhdHModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBsb25nICp0b3RhbF90aW1lKSB7CisJc3RydWN0IGNwdWZyZXFfc3RhdHMgKnJldDsKKworCXJldCA9IHN5c2ZzX2dldF9mcmVxX3N0YXRzKGNwdSwgdG90YWxfdGltZSk7CisJcmV0dXJuIChyZXQpOworfQorCit2b2lkIGNwdWZyZXFfcHV0X3N0YXRzKHN0cnVjdCBjcHVmcmVxX3N0YXRzICphbnkpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqdG1wLCAqbmV4dDsKKworCWlmICghYW55KQorCQlyZXR1cm47CisKKwl0bXAgPSBhbnktPmZpcnN0OworCXdoaWxlICh0bXApIHsKKwkJbmV4dCA9IHRtcC0+bmV4dDsKKwkJZnJlZSh0bXApOworCQl0bXAgPSBuZXh0OworCX0KK30KKwordW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF90cmFuc2l0aW9ucyh1bnNpZ25lZCBpbnQgY3B1KSB7CisJdW5zaWduZWQgbG9uZyByZXQgPSBzeXNmc19nZXRfZnJlcV90cmFuc2l0aW9ucyhjcHUpOworCisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL2NwdWZyZXEuaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9jcHVmcmVxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNiZTkwNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9jcHVmcmVxLmgKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiAgY3B1ZnJlcS5oIC0gZGVmaW5pdGlvbnMgZm9yIGxpYmNwdWZyZXEKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX0NQVUZSRVFfSAorI2RlZmluZSBfQ1BVRlJFUV9IIDEKKworc3RydWN0IGNwdWZyZXFfcG9saWN5IHsKKwl1bnNpZ25lZCBsb25nIG1pbjsKKwl1bnNpZ25lZCBsb25nIG1heDsKKwljaGFyICpnb3Zlcm5vcjsKK307CisKK3N0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgeworCWNoYXIgKmdvdmVybm9yOworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKm5leHQ7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqZmlyc3Q7Cit9OworCitzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgeworCXVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5OworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqbmV4dDsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgKmZpcnN0OworfTsKKworCitzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzIHsKKwl1bnNpZ25lZCBpbnQgY3B1OworCXN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKm5leHQ7CisJc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqZmlyc3Q7Cit9OworCitzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyB7CisJdW5zaWduZWQgbG9uZyBmcmVxdWVuY3k7CisJdW5zaWduZWQgbG9uZyBsb25nIHRpbWVfaW5fc3RhdGU7CisJc3RydWN0IGNwdWZyZXFfc3RhdHMgKm5leHQ7CisJc3RydWN0IGNwdWZyZXFfc3RhdHMgKmZpcnN0OworfTsKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoKKyAqIHJldHVybnMgMCBpZiB0aGUgc3BlY2lmaWVkIENQVSBpcyBwcmVzZW50IChpdCBkb2Vzbid0IHNheQorICogd2hldGhlciBpdCBpcyBvbmxpbmUhKSwgYW5kIGFuIGVycm9yIHZhbHVlIGlmIG5vdC4KKyAqLworCitleHRlcm4gaW50IGNwdWZyZXFfY3B1X2V4aXN0cyh1bnNpZ25lZCBpbnQgY3B1KTsKKworLyogZGV0ZXJtaW5lIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeQorICogLSBfa2VybmVsIHZhcmlhbnQgbWVhbnMga2VybmVsJ3Mgb3BpbmlvbiBvZiBDUFUgZnJlcXVlbmN5CisgKiAtIF9oYXJkd2FyZSB2YXJpYW50IG1lYW5zIGFjdHVhbCBoYXJkd2FyZSBDUFUgZnJlcXVlbmN5LAorICogICAgd2hpY2ggaXMgb25seSBhdmFpbGFibGUgdG8gcm9vdC4KKyAqCisgKiByZXR1cm5zIDAgb24gZmFpbHVyZSwgZWxzZSBmcmVxdWVuY3kgaW4ga0h6LgorICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNwdWZyZXFfZ2V0X2ZyZXFfa2VybmVsKHVuc2lnbmVkIGludCBjcHUpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF9mcmVxX2hhcmR3YXJlKHVuc2lnbmVkIGludCBjcHUpOworCisjZGVmaW5lIGNwdWZyZXFfZ2V0KGNwdSkgY3B1ZnJlcV9nZXRfZnJlcV9rZXJuZWwoY3B1KTsKKworCisvKiBkZXRlcm1pbmUgQ1BVIHRyYW5zaXRpb24gbGF0ZW5jeQorICoKKyAqIHJldHVybnMgMCBvbiBmYWlsdXJlLCBlbHNlIHRyYW5zaXRpb24gbGF0ZW5jeSBpbiAxMF4oLTkpIHMgPSBuYW5vc2Vjb25kcworICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF90cmFuc2l0aW9uX2xhdGVuY3kodW5zaWduZWQgaW50IGNwdSk7CisKKworLyogZGV0ZXJtaW5lIGhhcmR3YXJlIENQVSBmcmVxdWVuY3kgbGltaXRzCisgKgorICogVGhlc2UgbWF5IGJlIGxpbWl0ZWQgZnVydGhlciBieSB0aGVybWFsLCBlbmVyZ3kgb3Igb3RoZXIKKyAqIGNvbnNpZGVyYXRpb25zIGJ5IGNwdWZyZXEgcG9saWN5IG5vdGlmaWVycyBpbiB0aGUga2VybmVsLgorICovCisKK2V4dGVybiBpbnQgY3B1ZnJlcV9nZXRfaGFyZHdhcmVfbGltaXRzKHVuc2lnbmVkIGludCBjcHUsIAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nICptaW4sIAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nICptYXgpOworCisKKy8qIGRldGVybWluZSBDUFVmcmVxIGRyaXZlciB1c2VkCisgKgorICogUmVtZW1iZXIgdG8gY2FsbCBjcHVmcmVxX3B1dF9kcml2ZXIgd2hlbiBubyBsb25nZXIgbmVlZGVkCisgKiB0byBhdm9pZCBtZW1vcnkgbGVha2FnZSwgcGxlYXNlLgorICovCisKK2V4dGVybiBjaGFyICogY3B1ZnJlcV9nZXRfZHJpdmVyKHVuc2lnbmVkIGludCBjcHUpOworCitleHRlcm4gdm9pZCAgIGNwdWZyZXFfcHV0X2RyaXZlcihjaGFyICogcHRyKTsKKworCisvKiBkZXRlcm1pbmUgQ1BVZnJlcSBwb2xpY3kgY3VycmVudGx5IHVzZWQKKyAqCisgKiBSZW1lbWJlciB0byBjYWxsIGNwdWZyZXFfcHV0X3BvbGljeSB3aGVuIG5vIGxvbmdlciBuZWVkZWQKKyAqIHRvIGF2b2lkIG1lbW9yeSBsZWFrYWdlLCBwbGVhc2UuCisgKi8KKworCitleHRlcm4gc3RydWN0IGNwdWZyZXFfcG9saWN5ICogY3B1ZnJlcV9nZXRfcG9saWN5KHVuc2lnbmVkIGludCBjcHUpOworCitleHRlcm4gdm9pZCBjcHVmcmVxX3B1dF9wb2xpY3koc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOworCisKKy8qIGRldGVybWluZSBDUFVmcmVxIGdvdmVybm9ycyBjdXJyZW50bHkgYXZhaWxhYmxlCisgKgorICogbWF5IGJlIG1vZGlmaWVkIGJ5IG1vZHByb2JlJ2luZyBvciBybW1vZCdpbmcgb3RoZXIgZ292ZXJub3JzLiBQbGVhc2UKKyAqIGZyZWUgYWxsb2NhdGVkIG1lbW9yeSBieSBjYWxsaW5nIGNwdWZyZXFfcHV0X2F2YWlsYWJsZV9nb3Zlcm5vcnMKKyAqIGFmdGVyIHVzZS4KKyAqLworCisKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICogY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2dvdmVybm9ycyh1bnNpZ25lZCBpbnQgY3B1KTsKKworZXh0ZXJuIHZvaWQgY3B1ZnJlcV9wdXRfYXZhaWxhYmxlX2dvdmVybm9ycyhzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICpmaXJzdCk7CisKKworLyogZGV0ZXJtaW5lIENQVSBmcmVxdWVuY3kgc3RhdGVzIGF2YWlsYWJsZQorICoKKyAqIG9ubHkgcHJlc2VudCBvbiBfc29tZV8gLT50YXJnZXQoKSBjcHVmcmVxIGRyaXZlcnMuIEZvciBpbmZvcm1hdGlvbiBwdXJwb3NlcworICogb25seS4gUGxlYXNlIGZyZWUgYWxsb2NhdGVkIG1lbW9yeSBieSBjYWxsaW5nIGNwdWZyZXFfcHV0X2F2YWlsYWJsZV9mcmVxdWVuY2llcworICogYWZ0ZXIgdXNlLgorICovCisKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgKiBjcHVmcmVxX2dldF9hdmFpbGFibGVfZnJlcXVlbmNpZXModW5zaWduZWQgaW50IGNwdSk7CisKK2V4dGVybiB2b2lkIGNwdWZyZXFfcHV0X2F2YWlsYWJsZV9mcmVxdWVuY2llcyhzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgKmZpcnN0KTsKKworCisvKiBkZXRlcm1pbmUgYWZmZWN0ZWQgQ1BVcyAKKyAqCisgKiBSZW1lbWJlciB0byBjYWxsIGNwdWZyZXFfcHV0X2FmZmVjdGVkX2NwdXMgd2hlbiBubyBsb25nZXIgbmVlZGVkCisgKiB0byBhdm9pZCBtZW1vcnkgbGVha2FnZSwgcGxlYXNlLgorICovCisKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICogY3B1ZnJlcV9nZXRfYWZmZWN0ZWRfY3B1cyh1bnNpZ25lZCBpbnQgY3B1KTsKKworZXh0ZXJuIHZvaWQgY3B1ZnJlcV9wdXRfYWZmZWN0ZWRfY3B1cyhzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpmaXJzdCk7CisKKworLyogZGV0ZXJtaW5lIHJlbGF0ZWQgQ1BVcyAKKyAqCisgKiBSZW1lbWJlciB0byBjYWxsIGNwdWZyZXFfcHV0X3JlbGF0ZWRfY3B1cyB3aGVuIG5vIGxvbmdlciBuZWVkZWQKKyAqIHRvIGF2b2lkIG1lbW9yeSBsZWFrYWdlLCBwbGVhc2UuCisgKi8KKworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKiBjcHVmcmVxX2dldF9yZWxhdGVkX2NwdXModW5zaWduZWQgaW50IGNwdSk7CisKK2V4dGVybiB2b2lkIGNwdWZyZXFfcHV0X3JlbGF0ZWRfY3B1cyhzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpmaXJzdCk7CisKKworLyogZGV0ZXJtaW5lIHN0YXRzIGZvciBjcHVmcmVxIHN1YnN5c3RlbQorICoKKyAqIFRoaXMgaXMgbm90IGF2YWlsYWJsZSBpbiBhbGwga2VybmVsIHZlcnNpb25zIG9yIGNvbmZpZ3VyYXRpb25zLgorICovCisKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqIGNwdWZyZXFfZ2V0X3N0YXRzKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbG9uZyAqdG90YWxfdGltZSk7CisKK2V4dGVybiB2b2lkIGNwdWZyZXFfcHV0X3N0YXRzKHN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0cyk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNwdWZyZXFfZ2V0X3RyYW5zaXRpb25zKHVuc2lnbmVkIGludCBjcHUpOworCisKKy8qIHNldCBuZXcgY3B1ZnJlcSBwb2xpY3kgCisgKiAKKyAqIFRyaWVzIHRvIHNldCB0aGUgcGFzc2VkIHBvbGljeSBhcyBuZXcgcG9saWN5IGFzIGNsb3NlIGFzIHBvc3NpYmxlLAorICogYnV0IHJlc3VsdHMgbWF5IGRpZmZlciBkZXBlbmRpbmcgZS5nLiBvbiBnb3Zlcm5vcnMgYmVpbmcgYXZhaWxhYmxlLgorICovCisKK2V4dGVybiBpbnQgY3B1ZnJlcV9zZXRfcG9saWN5KHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KTsKKworCisvKiBtb2RpZnkgYSBwb2xpY3kgYnkgb25seSBjaGFuZ2luZyBtaW4vbWF4IGZyZXEgb3IgZ292ZXJub3IgCisgKgorICogRG9lcyBub3QgY2hlY2sgd2hldGhlciByZXN1bHQgaXMgd2hhdCB3YXMgaW50ZW5kZWQuCisgKi8KKworZXh0ZXJuIGludCBjcHVmcmVxX21vZGlmeV9wb2xpY3lfbWluKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbWluX2ZyZXEpOworZXh0ZXJuIGludCBjcHVmcmVxX21vZGlmeV9wb2xpY3lfbWF4KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbWF4X2ZyZXEpOworZXh0ZXJuIGludCBjcHVmcmVxX21vZGlmeV9wb2xpY3lfZ292ZXJub3IodW5zaWduZWQgaW50IGNwdSwgY2hhciAqZ292ZXJub3IpOworCisKKy8qIHNldCBhIHNwZWNpZmljIGZyZXF1ZW5jeQorICoKKyAqIERvZXMgb25seSB3b3JrIGlmIHVzZXJzcGFjZSBnb3Zlcm5vciBjYW4gYmUgdXNlZCBhbmQgbm8gZXh0ZXJuYWwKKyAqIGludGVyZmVyZW5jZSAob3RoZXIgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBvciB0byBzZXQvbW9kaWZ5X3BvbGljeSkgCisgKiBvY2N1cnMuIEFsc28gZG9lcyBub3Qgd29yayBvbiAtPnJhbmdlKCkgY3B1ZnJlcSBkcml2ZXJzLgorICovCisKK2V4dGVybiBpbnQgY3B1ZnJlcV9zZXRfZnJlcXVlbmN5KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X2ZyZXF1ZW5jeSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQ1BVRlJFUV9IICovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9saWIvc3lzZnMuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9zeXNmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YjA2MWYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9saWIvc3lzZnMuYwpAQCAtMCwwICsxLDY3MSBAQAorLyoKKyAqICAoQykgMjAwNC0yMDA5ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiY3B1ZnJlcS5oIgorCisjZGVmaW5lIFBBVEhfVE9fQ1BVICIvc3lzL2RldmljZXMvc3lzdGVtL2NwdS8iCisjZGVmaW5lIE1BWF9MSU5FX0xFTiAyNTUKKyNkZWZpbmUgU1lTRlNfUEFUSF9NQVggMjU1CisKKworc3RhdGljIHVuc2lnbmVkIGludCBzeXNmc19yZWFkX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworCWludCBmZDsKKwlzaXplX3QgbnVtcmVhZDsKKworCWlmICggKCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpICkgPT0gLTEgKQorCQlyZXR1cm4gMDsKKworCW51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpOworCWlmICggbnVtcmVhZCA8IDEgKQorCXsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlidWZbbnVtcmVhZF0gPSAnXDAnOworCWNsb3NlKGZkKTsKKworCXJldHVybiBudW1yZWFkOworfQorCisKKy8qIENQVUZSRVEgc3lzZnMgYWNjZXNzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBoZWxwZXIgZnVuY3Rpb24gdG8gcmVhZCBmaWxlIGZyb20gL3N5cyBpbnRvIGdpdmVuIGJ1ZmZlciAqLworLyogZm5hbWUgaXMgYSByZWxhdGl2ZSBwYXRoIHVuZGVyICJjcHVYL2NwdWZyZXEiIGRpciAqLworc3RhdGljIHVuc2lnbmVkIGludCBzeXNmc19jcHVmcmVxX3JlYWRfZmlsZSh1bnNpZ25lZCBpbnQgY3B1LCBjb25zdCBjaGFyICpmbmFtZSwKKwkJCQkJICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK3sKKwljaGFyIHBhdGhbU1lTRlNfUEFUSF9NQVhdOworCisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBQQVRIX1RPX0NQVSAiY3B1JXUvY3B1ZnJlcS8lcyIsCisJCQkgY3B1LCBmbmFtZSk7CisJcmV0dXJuIHN5c2ZzX3JlYWRfZmlsZShwYXRoLCBidWYsIGJ1Zmxlbik7Cit9CisKKy8qIGhlbHBlciBmdW5jdGlvbiB0byB3cml0ZSBhIG5ldyB2YWx1ZSB0byBhIC9zeXMgZmlsZSAqLworLyogZm5hbWUgaXMgYSByZWxhdGl2ZSBwYXRoIHVuZGVyICJjcHVYL2NwdWZyZXEiIGRpciAqLworc3RhdGljIHVuc2lnbmVkIGludCBzeXNmc19jcHVmcmVxX3dyaXRlX2ZpbGUodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJICAgICBjb25zdCBjaGFyICpmbmFtZSwKKwkJCQkJICAgICBjb25zdCBjaGFyICp2YWx1ZSwgc2l6ZV90IGxlbikKK3sKKwljaGFyIHBhdGhbU1lTRlNfUEFUSF9NQVhdOworCWludCBmZDsKKwlzaXplX3QgbnVtd3JpdGU7CisKKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFBBVEhfVE9fQ1BVICJjcHUldS9jcHVmcmVxLyVzIiwKKwkJCSBjcHUsIGZuYW1lKTsKKworCWlmICggKCBmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpICkgPT0gLTEgKQorCQlyZXR1cm4gMDsKKworCW51bXdyaXRlID0gd3JpdGUoZmQsIHZhbHVlLCBsZW4pOworCWlmICggbnVtd3JpdGUgPCAxICkKKwl7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJY2xvc2UoZmQpOworCisJcmV0dXJuIG51bXdyaXRlOworfQorCisvKiByZWFkIGFjY2VzcyB0byBmaWxlcyB3aGljaCBjb250YWluIG9uZSBudW1lcmljIHZhbHVlICovCisKK2VudW0gY3B1ZnJlcV92YWx1ZSB7CisJQ1BVSU5GT19DVVJfRlJFUSwKKwlDUFVJTkZPX01JTl9GUkVRLAorCUNQVUlORk9fTUFYX0ZSRVEsCisJQ1BVSU5GT19MQVRFTkNZLAorCVNDQUxJTkdfQ1VSX0ZSRVEsCisJU0NBTElOR19NSU5fRlJFUSwKKwlTQ0FMSU5HX01BWF9GUkVRLAorCVNUQVRTX05VTV9UUkFOU0lUSU9OUywKKwlNQVhfQ1BVRlJFUV9WQUxVRV9SRUFEX0ZJTEVTCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY3B1ZnJlcV92YWx1ZV9maWxlc1tNQVhfQ1BVRlJFUV9WQUxVRV9SRUFEX0ZJTEVTXSA9IHsKKwlbQ1BVSU5GT19DVVJfRlJFUV0gPSAiY3B1aW5mb19jdXJfZnJlcSIsCisJW0NQVUlORk9fTUlOX0ZSRVFdID0gImNwdWluZm9fbWluX2ZyZXEiLAorCVtDUFVJTkZPX01BWF9GUkVRXSA9ICJjcHVpbmZvX21heF9mcmVxIiwKKwlbQ1BVSU5GT19MQVRFTkNZXSAgPSAiY3B1aW5mb190cmFuc2l0aW9uX2xhdGVuY3kiLAorCVtTQ0FMSU5HX0NVUl9GUkVRXSA9ICJzY2FsaW5nX2N1cl9mcmVxIiwKKwlbU0NBTElOR19NSU5fRlJFUV0gPSAic2NhbGluZ19taW5fZnJlcSIsCisJW1NDQUxJTkdfTUFYX0ZSRVFdID0gInNjYWxpbmdfbWF4X2ZyZXEiLAorCVtTVEFUU19OVU1fVFJBTlNJVElPTlNdID0gInN0YXRzL3RvdGFsX3RyYW5zIgorfTsKKworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJCSBlbnVtIGNwdWZyZXFfdmFsdWUgd2hpY2gpCit7CisgCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJdW5zaWduZWQgaW50IGxlbjsKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwljaGFyICplbmRwOworCisJaWYgKCB3aGljaCA+PSBNQVhfQ1BVRlJFUV9WQUxVRV9SRUFEX0ZJTEVTICkKKwkJcmV0dXJuIDA7CisKKwlpZiAoICggbGVuID0gc3lzZnNfY3B1ZnJlcV9yZWFkX2ZpbGUoY3B1LCBjcHVmcmVxX3ZhbHVlX2ZpbGVzW3doaWNoXSwKKwkJCQkJICAgICBsaW5lYnVmLCBzaXplb2YobGluZWJ1ZikpKSA9PSAwICkKKwkJcmV0dXJuIDA7CisKKwl2YWx1ZSA9IHN0cnRvdWwobGluZWJ1ZiwgJmVuZHAsIDApOworCisJaWYgKCBlbmRwID09IGxpbmVidWYgfHwgZXJybm8gPT0gRVJBTkdFICkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qIHJlYWQgYWNjZXNzIHRvIGZpbGVzIHdoaWNoIGNvbnRhaW4gb25lIHN0cmluZyAqLworCitlbnVtIGNwdWZyZXFfc3RyaW5nIHsKKwlTQ0FMSU5HX0RSSVZFUiwKKwlTQ0FMSU5HX0dPVkVSTk9SLAorCU1BWF9DUFVGUkVRX1NUUklOR19GSUxFUworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNwdWZyZXFfc3RyaW5nX2ZpbGVzW01BWF9DUFVGUkVRX1NUUklOR19GSUxFU10gPSB7CisJW1NDQUxJTkdfRFJJVkVSXSA9ICJzY2FsaW5nX2RyaXZlciIsCisJW1NDQUxJTkdfR09WRVJOT1JdID0gInNjYWxpbmdfZ292ZXJub3IiLAorfTsKKworCitzdGF0aWMgY2hhciAqIHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV9zdHJpbmcodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJICAgZW51bSBjcHVmcmVxX3N0cmluZyB3aGljaCkKK3sKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwljaGFyICpyZXN1bHQ7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmICh3aGljaCA+PSBNQVhfQ1BVRlJFUV9TVFJJTkdfRklMRVMpCisJCXJldHVybiBOVUxMOworCisJaWYgKCAoIGxlbiA9IHN5c2ZzX2NwdWZyZXFfcmVhZF9maWxlKGNwdSwgY3B1ZnJlcV9zdHJpbmdfZmlsZXNbd2hpY2hdLAorCQkJCQkgICAgIGxpbmVidWYsIHNpemVvZihsaW5lYnVmKSkpID09IDAgKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICggKCByZXN1bHQgPSBzdHJkdXAobGluZWJ1ZikgKSA9PSBOVUxMICkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocmVzdWx0W3N0cmxlbihyZXN1bHQpIC0gMV0gPT0gJ1xuJykKKwkJcmVzdWx0W3N0cmxlbihyZXN1bHQpIC0gMV0gPSAnXDAnOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogd3JpdGUgYWNjZXNzICovCisKK2VudW0gY3B1ZnJlcV93cml0ZSB7CisJV1JJVEVfU0NBTElOR19NSU5fRlJFUSwKKwlXUklURV9TQ0FMSU5HX01BWF9GUkVRLAorCVdSSVRFX1NDQUxJTkdfR09WRVJOT1IsCisJV1JJVEVfU0NBTElOR19TRVRfU1BFRUQsCisJTUFYX0NQVUZSRVFfV1JJVEVfRklMRVMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjcHVmcmVxX3dyaXRlX2ZpbGVzW01BWF9DUFVGUkVRX1dSSVRFX0ZJTEVTXSA9IHsKKwlbV1JJVEVfU0NBTElOR19NSU5fRlJFUV0gPSAic2NhbGluZ19taW5fZnJlcSIsCisJW1dSSVRFX1NDQUxJTkdfTUFYX0ZSRVFdID0gInNjYWxpbmdfbWF4X2ZyZXEiLAorCVtXUklURV9TQ0FMSU5HX0dPVkVSTk9SXSA9ICJzY2FsaW5nX2dvdmVybm9yIiwKKwlbV1JJVEVfU0NBTElOR19TRVRfU1BFRURdID0gInNjYWxpbmdfc2V0c3BlZWQiLAorfTsKKworc3RhdGljIGludCBzeXNmc19jcHVmcmVxX3dyaXRlX29uZV92YWx1ZSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkgZW51bSBjcHVmcmVxX3dyaXRlIHdoaWNoLAorCQkJCQkgY29uc3QgY2hhciAqbmV3X3ZhbHVlLCBzaXplX3QgbGVuKQoreworCWlmICh3aGljaCA+PSBNQVhfQ1BVRlJFUV9XUklURV9GSUxFUykKKwkJcmV0dXJuIDA7CisKKwlpZiAoIHN5c2ZzX2NwdWZyZXFfd3JpdGVfZmlsZShjcHUsIGNwdWZyZXFfd3JpdGVfZmlsZXNbd2hpY2hdLAorCQkJICAgICAgbmV3X3ZhbHVlLCBsZW4pICE9IGxlbiApCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIDA7Cit9OworCit1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9mcmVxX2tlcm5lbCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBTQ0FMSU5HX0NVUl9GUkVRKTsKK30KKwordW5zaWduZWQgbG9uZyBzeXNmc19nZXRfZnJlcV9oYXJkd2FyZSh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBDUFVJTkZPX0NVUl9GUkVRKTsKK30KKwordW5zaWduZWQgbG9uZyBzeXNmc19nZXRfZnJlcV90cmFuc2l0aW9uX2xhdGVuY3kodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV9nZXRfb25lX3ZhbHVlKGNwdSwgQ1BVSU5GT19MQVRFTkNZKTsKK30KKworaW50IHN5c2ZzX2dldF9mcmVxX2hhcmR3YXJlX2xpbWl0cyh1bnNpZ25lZCBpbnQgY3B1LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyAqbWluLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyAqbWF4KQoreworCWlmICgoIW1pbikgfHwgKCFtYXgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSptaW4gPSBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBDUFVJTkZPX01JTl9GUkVRKTsKKwlpZiAoISptaW4pCisJCXJldHVybiAtRU5PREVWOworCisJKm1heCA9IHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV92YWx1ZShjcHUsIENQVUlORk9fTUFYX0ZSRVEpOworCWlmICghKm1heCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KKworY2hhciAqIHN5c2ZzX2dldF9mcmVxX2RyaXZlcih1bnNpZ25lZCBpbnQgY3B1KSB7CisJcmV0dXJuIHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV9zdHJpbmcoY3B1LCBTQ0FMSU5HX0RSSVZFUik7Cit9CisKK3N0cnVjdCBjcHVmcmVxX3BvbGljeSAqIHN5c2ZzX2dldF9mcmVxX3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1KSB7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CisKKwlwb2xpY3kgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX3BvbGljeSkpOworCWlmICghcG9saWN5KQorCQlyZXR1cm4gTlVMTDsKKworCXBvbGljeS0+Z292ZXJub3IgPSBzeXNmc19jcHVmcmVxX2dldF9vbmVfc3RyaW5nKGNwdSwgU0NBTElOR19HT1ZFUk5PUik7CisJaWYgKCFwb2xpY3ktPmdvdmVybm9yKSB7CisJCWZyZWUocG9saWN5KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXBvbGljeS0+bWluID0gc3lzZnNfY3B1ZnJlcV9nZXRfb25lX3ZhbHVlKGNwdSwgU0NBTElOR19NSU5fRlJFUSk7CisJcG9saWN5LT5tYXggPSBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBTQ0FMSU5HX01BWF9GUkVRKTsKKwlpZiAoKCFwb2xpY3ktPm1pbikgfHwgKCFwb2xpY3ktPm1heCkpIHsKKwkJZnJlZShwb2xpY3ktPmdvdmVybm9yKTsKKwkJZnJlZShwb2xpY3kpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcG9saWN5OworfQorCitzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICoKK3N5c2ZzX2dldF9mcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnModW5zaWduZWQgaW50IGNwdSkgeworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKmZpcnN0ID0gTlVMTDsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICpjdXJyZW50ID0gTlVMTDsKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwl1bnNpZ25lZCBpbnQgcG9zLCBpOworCXVuc2lnbmVkIGludCBsZW47CisKKwlpZiAoICggbGVuID0gc3lzZnNfY3B1ZnJlcV9yZWFkX2ZpbGUoY3B1LCAic2NhbGluZ19hdmFpbGFibGVfZ292ZXJub3JzIiwKKwkJCQkJICAgICBsaW5lYnVmLCBzaXplb2YobGluZWJ1ZikpKSA9PSAwICkKKwl7CisJCXJldHVybiBOVUxMOworCX0KKworCXBvcyA9IDA7CisJZm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApCisJeworCQlpZiAoIGxpbmVidWZbaV0gPT0gJyAnIHx8IGxpbmVidWZbaV0gPT0gJ1xuJyApCisJCXsKKwkJCWlmICggaSAtIHBvcyA8IDIgKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCBjdXJyZW50ICkgeworCQkJCWN1cnJlbnQtPm5leHQgPSBtYWxsb2Moc2l6ZW9mICpjdXJyZW50ICk7CisJCQkJaWYgKCAhIGN1cnJlbnQtPm5leHQgKQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCQljdXJyZW50ID0gY3VycmVudC0+bmV4dDsKKwkJCX0gZWxzZSB7CisJCQkJZmlyc3QgPSBtYWxsb2MoIHNpemVvZiAqZmlyc3QgKTsKKwkJCQlpZiAoICEgZmlyc3QgKQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCQljdXJyZW50ID0gZmlyc3Q7CisJCQl9CisJCQljdXJyZW50LT5maXJzdCA9IGZpcnN0OworCQkJY3VycmVudC0+bmV4dCA9IE5VTEw7CisKKwkJCWN1cnJlbnQtPmdvdmVybm9yID0gbWFsbG9jKGkgLSBwb3MgKyAxKTsKKwkJCWlmICggISBjdXJyZW50LT5nb3Zlcm5vciApCisJCQkJZ290byBlcnJvcl9vdXQ7CisKKwkJCW1lbWNweSggY3VycmVudC0+Z292ZXJub3IsIGxpbmVidWYgKyBwb3MsIGkgLSBwb3MpOworCQkJY3VycmVudC0+Z292ZXJub3JbaSAtIHBvc10gPSAnXDAnOworCQkJcG9zID0gaSArIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gZmlyc3Q7CisKKyBlcnJvcl9vdXQ6CisJd2hpbGUgKCBmaXJzdCApIHsKKwkJY3VycmVudCA9IGZpcnN0LT5uZXh0OworCQlpZiAoIGZpcnN0LT5nb3Zlcm5vciApCisJCQlmcmVlKCBmaXJzdC0+Z292ZXJub3IgKTsKKwkJZnJlZSggZmlyc3QgKTsKKwkJZmlyc3QgPSBjdXJyZW50OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworCitzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgKgorc3lzZnNfZ2V0X2F2YWlsYWJsZV9mcmVxdWVuY2llcyh1bnNpZ25lZCBpbnQgY3B1KSB7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICpmaXJzdCA9IE5VTEw7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICpjdXJyZW50ID0gTlVMTDsKKwljaGFyIG9uZV92YWx1ZVtTWVNGU19QQVRIX01BWF07CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJdW5zaWduZWQgaW50IHBvcywgaTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJaWYgKCAoIGxlbiA9IHN5c2ZzX2NwdWZyZXFfcmVhZF9maWxlKGNwdSwKKwkJCQkJICAgICAic2NhbGluZ19hdmFpbGFibGVfZnJlcXVlbmNpZXMiLAorCQkJCQkgICAgIGxpbmVidWYsIHNpemVvZihsaW5lYnVmKSkpID09IDAgKQorCXsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcG9zID0gMDsKKwlmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkKKwl7CisJCWlmICggbGluZWJ1ZltpXSA9PSAnICcgfHwgbGluZWJ1ZltpXSA9PSAnXG4nICkKKwkJeworCQkJaWYgKCBpIC0gcG9zIDwgMiApCisJCQkJY29udGludWU7CisJCQlpZiAoIGkgLSBwb3MgPj0gU1lTRlNfUEFUSF9NQVggKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJaWYgKCBjdXJyZW50ICkgeworCQkJCWN1cnJlbnQtPm5leHQgPSBtYWxsb2Moc2l6ZW9mICpjdXJyZW50ICk7CisJCQkJaWYgKCAhIGN1cnJlbnQtPm5leHQgKQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCQljdXJyZW50ID0gY3VycmVudC0+bmV4dDsKKwkJCX0gZWxzZSB7CisJCQkJZmlyc3QgPSBtYWxsb2Moc2l6ZW9mICpmaXJzdCApOworCQkJCWlmICggISBmaXJzdCApCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJCWN1cnJlbnQgPSBmaXJzdDsKKwkJCX0KKwkJCWN1cnJlbnQtPmZpcnN0ID0gZmlyc3Q7CisJCQljdXJyZW50LT5uZXh0ID0gTlVMTDsKKworCQkJbWVtY3B5KG9uZV92YWx1ZSwgbGluZWJ1ZiArIHBvcywgaSAtIHBvcyk7CisJCQlvbmVfdmFsdWVbaSAtIHBvc10gPSAnXDAnOworCQkJaWYgKCBzc2NhbmYob25lX3ZhbHVlLCAiJWx1IiwgJmN1cnJlbnQtPmZyZXF1ZW5jeSkgIT0gMSApCisJCQkJZ290byBlcnJvcl9vdXQ7CisKKwkJCXBvcyA9IGkgKyAxOworCQl9CisJfQorCisJcmV0dXJuIGZpcnN0OworCisgZXJyb3Jfb3V0OgorCXdoaWxlICggZmlyc3QgKSB7CisJCWN1cnJlbnQgPSBmaXJzdC0+bmV4dDsKKwkJZnJlZShmaXJzdCk7CisJCWZpcnN0ID0gY3VycmVudDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICogc3lzZnNfZ2V0X2NwdV9saXN0KHVuc2lnbmVkIGludCBjcHUsCisJCQkJCQkJIGNvbnN0IGNoYXIgKmZpbGUpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpmaXJzdCA9IE5VTEw7CisJc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqY3VycmVudCA9IE5VTEw7CisJY2hhciBvbmVfdmFsdWVbU1lTRlNfUEFUSF9NQVhdOworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCXVuc2lnbmVkIGludCBwb3MsIGk7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmICggKCBsZW4gPSBzeXNmc19jcHVmcmVxX3JlYWRfZmlsZShjcHUsIGZpbGUsIGxpbmVidWYsCisJCQkJCSAgICAgc2l6ZW9mKGxpbmVidWYpKSkgPT0gMCApCisJeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwb3MgPSAwOworCWZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKQorCXsKKwkJaWYgKCBpID09IGxlbiB8fCBsaW5lYnVmW2ldID09ICcgJyB8fCBsaW5lYnVmW2ldID09ICdcbicgKQorCQl7CisJCQlpZiAoIGkgLSBwb3MgIDwgMSApCisJCQkJY29udGludWU7CisJCQlpZiAoIGkgLSBwb3MgPj0gU1lTRlNfUEFUSF9NQVggKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJaWYgKCBjdXJyZW50ICkgeworCQkJCWN1cnJlbnQtPm5leHQgPSBtYWxsb2Moc2l6ZW9mICpjdXJyZW50KTsKKwkJCQlpZiAoICEgY3VycmVudC0+bmV4dCApCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJCWN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OworCQkJfSBlbHNlIHsKKwkJCQlmaXJzdCA9IG1hbGxvYyhzaXplb2YgKmZpcnN0KTsKKwkJCQlpZiAoICEgZmlyc3QgKQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCQljdXJyZW50ID0gZmlyc3Q7CisJCQl9CisJCQljdXJyZW50LT5maXJzdCA9IGZpcnN0OworCQkJY3VycmVudC0+bmV4dCA9IE5VTEw7CisKKwkJCW1lbWNweShvbmVfdmFsdWUsIGxpbmVidWYgKyBwb3MsIGkgLSBwb3MpOworCQkJb25lX3ZhbHVlW2kgLSBwb3NdID0gJ1wwJzsKKworCQkJaWYgKCBzc2NhbmYob25lX3ZhbHVlLCAiJXUiLCAmY3VycmVudC0+Y3B1KSAhPSAxICkKKwkJCQlnb3RvIGVycm9yX291dDsKKworCQkJcG9zID0gaSArIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gZmlyc3Q7CisKKyBlcnJvcl9vdXQ6CisJd2hpbGUgKGZpcnN0KSB7CisJCWN1cnJlbnQgPSBmaXJzdC0+bmV4dDsKKwkJZnJlZShmaXJzdCk7CisJCWZpcnN0ID0gY3VycmVudDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKiBzeXNmc19nZXRfZnJlcV9hZmZlY3RlZF9jcHVzKHVuc2lnbmVkIGludCBjcHUpIHsKKwlyZXR1cm4gc3lzZnNfZ2V0X2NwdV9saXN0KGNwdSwgImFmZmVjdGVkX2NwdXMiKTsKK30KKworc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqIHN5c2ZzX2dldF9mcmVxX3JlbGF0ZWRfY3B1cyh1bnNpZ25lZCBpbnQgY3B1KSB7CisJcmV0dXJuIHN5c2ZzX2dldF9jcHVfbGlzdChjcHUsICJyZWxhdGVkX2NwdXMiKTsKK30KKworc3RydWN0IGNwdWZyZXFfc3RhdHMgKiBzeXNmc19nZXRfZnJlcV9zdGF0cyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGxvbmcgKnRvdGFsX3RpbWUpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqZmlyc3QgPSBOVUxMOworCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpjdXJyZW50ID0gTlVMTDsKKwljaGFyIG9uZV92YWx1ZVtTWVNGU19QQVRIX01BWF07CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJdW5zaWduZWQgaW50IHBvcywgaTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJaWYgKCAoIGxlbiA9IHN5c2ZzX2NwdWZyZXFfcmVhZF9maWxlKGNwdSwgInN0YXRzL3RpbWVfaW5fc3RhdGUiLAorCQkJCQkgICAgIGxpbmVidWYsIHNpemVvZihsaW5lYnVmKSkpID09IDAgKQorCQlyZXR1cm4gTlVMTDsKKworCSp0b3RhbF90aW1lID0gMDsKKwlwb3MgPSAwOworCWZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKQorCXsKKwkJaWYgKCBpID09IHN0cmxlbihsaW5lYnVmKSB8fCBsaW5lYnVmW2ldID09ICdcbicgKQorCQl7CisJCQlpZiAoIGkgLSBwb3MgPCAyICkKKwkJCQljb250aW51ZTsKKwkJCWlmICggKGkgLSBwb3MpID49IFNZU0ZTX1BBVEhfTUFYICkKKwkJCQlnb3RvIGVycm9yX291dDsKKwkJCWlmICggY3VycmVudCApIHsKKwkJCQljdXJyZW50LT5uZXh0ID0gbWFsbG9jKHNpemVvZiAqY3VycmVudCApOworCQkJCWlmICggISBjdXJyZW50LT5uZXh0ICkKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CisJCQl9IGVsc2UgeworCQkJCWZpcnN0ID0gbWFsbG9jKHNpemVvZiAqZmlyc3QgKTsKKwkJCQlpZiAoICEgZmlyc3QgKQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCQljdXJyZW50ID0gZmlyc3Q7CisJCQl9CisJCQljdXJyZW50LT5maXJzdCA9IGZpcnN0OworCQkJY3VycmVudC0+bmV4dCA9IE5VTEw7CisKKwkJCW1lbWNweShvbmVfdmFsdWUsIGxpbmVidWYgKyBwb3MsIGkgLSBwb3MpOworCQkJb25lX3ZhbHVlW2kgLSBwb3NdID0gJ1wwJzsKKwkJCWlmICggc3NjYW5mKG9uZV92YWx1ZSwgIiVsdSAlbGx1IiwgJmN1cnJlbnQtPmZyZXF1ZW5jeSwgJmN1cnJlbnQtPnRpbWVfaW5fc3RhdGUpICE9IDIgKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCisJCQkqdG90YWxfdGltZSA9ICp0b3RhbF90aW1lICsgY3VycmVudC0+dGltZV9pbl9zdGF0ZTsKKwkJCXBvcyA9IGkgKyAxOworCQl9CisJfQorCisJcmV0dXJuIGZpcnN0OworCisgZXJyb3Jfb3V0OgorCXdoaWxlICggZmlyc3QgKSB7CisJCWN1cnJlbnQgPSBmaXJzdC0+bmV4dDsKKwkJZnJlZShmaXJzdCk7CisJCWZpcnN0ID0gY3VycmVudDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3Vuc2lnbmVkIGxvbmcgc3lzZnNfZ2V0X2ZyZXFfdHJhbnNpdGlvbnModW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV9nZXRfb25lX3ZhbHVlKGNwdSwgU1RBVFNfTlVNX1RSQU5TSVRJT05TKTsKK30KKworc3RhdGljIGludCB2ZXJpZnlfZ292KGNoYXIgKm5ld19nb3YsIGNoYXIgKnBhc3NlZF9nb3YpCit7CisJdW5zaWduZWQgaW50IGksIGo9MDsKKworCWlmICghcGFzc2VkX2dvdiB8fCAoc3RybGVuKHBhc3NlZF9nb3YpID4gMTkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cm5jcHkobmV3X2dvdiwgcGFzc2VkX2dvdiwgMjApOworCWZvciAoaT0wO2k8MjA7aSsrKSB7CisJCWlmIChqKSB7CisJCQluZXdfZ292W2ldID0gJ1wwJzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgobmV3X2dvdltpXSA+PSAnYScpICYmIChuZXdfZ292W2ldIDw9ICd6JykpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgobmV3X2dvdltpXSA+PSAnQScpICYmIChuZXdfZ292W2ldIDw9ICdaJykpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChuZXdfZ292W2ldID09ICctJykgeworCQkJY29udGludWU7CisJCX0KKwkJaWYgKG5ld19nb3ZbaV0gPT0gJ18nKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobmV3X2dvdltpXSA9PSAnXDAnKSB7CisJCQlqID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXJldHVybiAtRUlOVkFMOworCX0KKwluZXdfZ292WzE5XSA9ICdcMCc7CisJcmV0dXJuIDA7Cit9CisKK2ludCBzeXNmc19tb2RpZnlfZnJlcV9wb2xpY3lfZ292ZXJub3IodW5zaWduZWQgaW50IGNwdSwgY2hhciAqZ292ZXJub3IpCit7CisJY2hhciBuZXdfZ292W1NZU0ZTX1BBVEhfTUFYXTsKKworCWlmICghZ292ZXJub3IpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZlcmlmeV9nb3YobmV3X2dvdiwgZ292ZXJub3IpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBzeXNmc19jcHVmcmVxX3dyaXRlX29uZV92YWx1ZShjcHUsIFdSSVRFX1NDQUxJTkdfR09WRVJOT1IsCisJCQkJCSAgICAgbmV3X2dvdiwgc3RybGVuKG5ld19nb3YpKTsKK307CisKK2ludCBzeXNmc19tb2RpZnlfZnJlcV9wb2xpY3lfbWF4KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbWF4X2ZyZXEpCit7CisJY2hhciB2YWx1ZVtTWVNGU19QQVRIX01BWF07CisKKwlzbnByaW50Zih2YWx1ZSwgU1lTRlNfUEFUSF9NQVgsICIlbHUiLCBtYXhfZnJlcSk7CisKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX01BWF9GUkVRLAorCQkJCQkgICAgIHZhbHVlLCBzdHJsZW4odmFsdWUpKTsKK307CisKKworaW50IHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9taW4odW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBtaW5fZnJlcSkKK3sKKwljaGFyIHZhbHVlW1NZU0ZTX1BBVEhfTUFYXTsKKworCXNucHJpbnRmKHZhbHVlLCBTWVNGU19QQVRIX01BWCwgIiVsdSIsIG1pbl9mcmVxKTsKKworCXJldHVybiBzeXNmc19jcHVmcmVxX3dyaXRlX29uZV92YWx1ZShjcHUsIFdSSVRFX1NDQUxJTkdfTUlOX0ZSRVEsCisJCQkJCSAgICAgdmFsdWUsIHN0cmxlbih2YWx1ZSkpOworfTsKKworCitpbnQgc3lzZnNfc2V0X2ZyZXFfcG9saWN5KHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQoreworCWNoYXIgbWluW1NZU0ZTX1BBVEhfTUFYXTsKKwljaGFyIG1heFtTWVNGU19QQVRIX01BWF07CisJY2hhciBnb3ZbU1lTRlNfUEFUSF9NQVhdOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBvbGRfbWluOworCWludCB3cml0ZV9tYXhfZmlyc3Q7CisKKwlpZiAoIXBvbGljeSB8fCAhKHBvbGljeS0+Z292ZXJub3IpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwb2xpY3ktPm1heCA8IHBvbGljeS0+bWluKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2ZXJpZnlfZ292KGdvdiwgcG9saWN5LT5nb3Zlcm5vcikpCisJCXJldHVybiAtRUlOVkFMOworCisJc25wcmludGYobWluLCBTWVNGU19QQVRIX01BWCwgIiVsdSIsIHBvbGljeS0+bWluKTsKKwlzbnByaW50ZihtYXgsIFNZU0ZTX1BBVEhfTUFYLCAiJWx1IiwgcG9saWN5LT5tYXgpOworCisJb2xkX21pbiA9IHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV92YWx1ZShjcHUsIFNDQUxJTkdfTUlOX0ZSRVEpOworCXdyaXRlX21heF9maXJzdCA9IChvbGRfbWluICYmIChwb2xpY3ktPm1heCA8IG9sZF9taW4pID8gMCA6IDEpOworCisJaWYgKHdyaXRlX21heF9maXJzdCkgeworCQlyZXQgPSBzeXNmc19jcHVmcmVxX3dyaXRlX29uZV92YWx1ZShjcHUsIFdSSVRFX1NDQUxJTkdfTUFYX0ZSRVEsCisJCQkJCQkgICAgbWF4LCBzdHJsZW4obWF4KSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHN5c2ZzX2NwdWZyZXFfd3JpdGVfb25lX3ZhbHVlKGNwdSwgV1JJVEVfU0NBTElOR19NSU5fRlJFUSwgbWluLAorCQkJCQkgICAgc3RybGVuKG1pbikpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoIXdyaXRlX21heF9maXJzdCkgeworCQlyZXQgPSBzeXNmc19jcHVmcmVxX3dyaXRlX29uZV92YWx1ZShjcHUsIFdSSVRFX1NDQUxJTkdfTUFYX0ZSRVEsCisJCQkJCQkgICAgbWF4LCBzdHJsZW4obWF4KSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiBzeXNmc19jcHVmcmVxX3dyaXRlX29uZV92YWx1ZShjcHUsIFdSSVRFX1NDQUxJTkdfR09WRVJOT1IsCisJCQkJCSAgICAgZ292LCBzdHJsZW4oZ292KSk7Cit9CisKK2ludCBzeXNmc19zZXRfZnJlcXVlbmN5KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X2ZyZXF1ZW5jeSkgeworCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9sID0gc3lzZnNfZ2V0X2ZyZXFfcG9saWN5KGNwdSk7CisJY2hhciB1c2Vyc3BhY2VfZ292W10gPSAidXNlcnNwYWNlIjsKKwljaGFyIGZyZXFbU1lTRlNfUEFUSF9NQVhdOworCWludCByZXQ7CisKKwlpZiAoIXBvbCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoc3RybmNtcChwb2wtPmdvdmVybm9yLCB1c2Vyc3BhY2VfZ292LCA5KSAhPSAwKSB7CisJCXJldCA9IHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9nb3Zlcm5vcihjcHUsIHVzZXJzcGFjZV9nb3YpOworCQlpZiAocmV0KSB7CisJCQljcHVmcmVxX3B1dF9wb2xpY3kocG9sKTsKKwkJCXJldHVybiAocmV0KTsKKwkJfQorCX0KKworCWNwdWZyZXFfcHV0X3BvbGljeShwb2wpOworCisJc25wcmludGYoZnJlcSwgU1lTRlNfUEFUSF9NQVgsICIlbHUiLCB0YXJnZXRfZnJlcXVlbmN5KTsKKworCXJldHVybiBzeXNmc19jcHVmcmVxX3dyaXRlX29uZV92YWx1ZShjcHUsIFdSSVRFX1NDQUxJTkdfU0VUX1NQRUVELAorCQkJCQkgICAgIGZyZXEsIHN0cmxlbihmcmVxKSk7Cit9CisKKy8qIENQVUZSRVEgc3lzZnMgYWNjZXNzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBHZW5lcmFsIHN5c2ZzIGFjY2VzcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBzeXNmc19jcHVfZXhpc3RzKHVuc2lnbmVkIGludCBjcHUpCit7CisJY2hhciBmaWxlW1NZU0ZTX1BBVEhfTUFYXTsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCisJc25wcmludGYoZmlsZSwgU1lTRlNfUEFUSF9NQVgsIFBBVEhfVE9fQ1BVICJjcHUldS8iLCBjcHUpOworCisJaWYgKCBzdGF0KGZpbGUsICZzdGF0YnVmKSAhPSAwICkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlyZXR1cm4gU19JU0RJUihzdGF0YnVmLnN0X21vZGUpID8gMCA6IC1FTk9TWVM7Cit9CisKKy8qIEdlbmVyYWwgc3lzZnMgYWNjZXNzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL3N5c2ZzLmggYi90b29scy9wb3dlci9jcHVwb3dlci9saWIvc3lzZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjllNTU3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL3N5c2ZzLmgKQEAgLTAsMCArMSwyMSBAQAorLyogR2VuZXJhbCAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBzeXNmc19jcHVfZXhpc3RzKHVuc2lnbmVkIGludCBjcHUpOworCisvKiBDUFVmcmVxICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNmc19nZXRfZnJlcV9rZXJuZWwodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNmc19nZXRfZnJlcV9oYXJkd2FyZSh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9mcmVxX3RyYW5zaXRpb25fbGF0ZW5jeSh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiBpbnQgc3lzZnNfZ2V0X2ZyZXFfaGFyZHdhcmVfbGltaXRzKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgKm1pbiwgdW5zaWduZWQgbG9uZyAqbWF4KTsKK2V4dGVybiBjaGFyICogc3lzZnNfZ2V0X2ZyZXFfZHJpdmVyKHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqIHN5c2ZzX2dldF9mcmVxX3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICogc3lzZnNfZ2V0X2ZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgKiBzeXNmc19nZXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKiBzeXNmc19nZXRfZnJlcV9hZmZlY3RlZF9jcHVzKHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKiBzeXNmc19nZXRfZnJlcV9yZWxhdGVkX2NwdXModW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gc3RydWN0IGNwdWZyZXFfc3RhdHMgKiBzeXNmc19nZXRfZnJlcV9zdGF0cyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIGxvbmcgKnRvdGFsX3RpbWUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3lzZnNfZ2V0X2ZyZXFfdHJhbnNpdGlvbnModW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gaW50IHN5c2ZzX3NldF9mcmVxX3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSk7CitleHRlcm4gaW50IHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9taW4odW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBtaW5fZnJlcSk7CitleHRlcm4gaW50IHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9tYXgodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBtYXhfZnJlcSk7CitleHRlcm4gaW50IHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9nb3Zlcm5vcih1bnNpZ25lZCBpbnQgY3B1LCBjaGFyICpnb3Zlcm5vcik7CitleHRlcm4gaW50IHN5c2ZzX3NldF9mcmVxdWVuY3kodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB0YXJnZXRfZnJlcXVlbmN5KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1mcmVxdWVuY3ktaW5mby4xIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLWZyZXF1ZW5jeS1pbmZvLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5NDgxMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1mcmVxdWVuY3ktaW5mby4xCkBAIC0wLDAgKzEsNzYgQEAKKy5USCAiY3B1ZnJlcS1pbmZvIiAiMSIgIjAuMSIgIk1hdHRpYSBEb25naWxpIiAiIgorLlNIICJOQU1FIgorLkxQIAorY3B1ZnJlcVwtaW5mbyBcLSBVdGlsaXR5IHRvIHJldHJpZXZlIGNwdWZyZXEga2VybmVsIGluZm9ybWF0aW9uCisuU0ggIlNZTlRBWCIKKy5MUCAKK2NwdWZyZXFcLWluZm8gW1xmSW9wdGlvbnNcZlBdCisuU0ggIkRFU0NSSVBUSU9OIgorLkxQIAorQSBzbWFsbCB0b29sIHdoaWNoIHByaW50cyBvdXQgY3B1ZnJlcSBpbmZvcm1hdGlvbiBoZWxwZnVsIHRvIGRldmVsb3BlcnMgYW5kIGludGVyZXN0ZWQgdXNlcnMuCisuU0ggIk9QVElPTlMiCisuTFAgCisuVFAgIAorXGZCXC1lXGZSIFxmQlwtXC1kZWJ1Z1xmUgorUHJpbnRzIG91dCBkZWJ1ZyBpbmZvcm1hdGlvbi4KKy5UUCAgCitcZkJcLWZcZlIgXGZCXC1cLWZyZXFcZlIKK0dldCBmcmVxdWVuY3kgdGhlIENQVSBjdXJyZW50bHkgcnVucyBhdCwgYWNjb3JkaW5nIHRvIHRoZSBjcHVmcmVxIGNvcmUuCisuVFAgIAorXGZCXC13XGZSIFxmQlwtXC1od2ZyZXFcZlIKK0dldCBmcmVxdWVuY3kgdGhlIENQVSBjdXJyZW50bHkgcnVucyBhdCwgYnkgcmVhZGluZyBpdCBmcm9tIGhhcmR3YXJlIChvbmx5IGF2YWlsYWJsZSB0byByb290KS4KKy5UUCAgCitcZkJcLWxcZlIgXGZCXC1cLWh3bGltaXRzXGZSCitEZXRlcm1pbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSBhbGxvd2VkLgorLlRQICAKK1xmQlwtZFxmUiBcZkJcLVwtZHJpdmVyXGZSCitEZXRlcm1pbmVzIHRoZSB1c2VkIGNwdWZyZXEga2VybmVsIGRyaXZlci4KKy5UUCAgCitcZkJcLXBcZlIgXGZCXC1cLXBvbGljeVxmUgorR2V0cyB0aGUgY3VycmVudGx5IHVzZWQgY3B1ZnJlcSBwb2xpY3kuCisuVFAgIAorXGZCXC1nXGZSIFxmQlwtXC1nb3Zlcm5vcnNcZlIKK0RldGVybWluZXMgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzLgorLlRQICAKK1xmQlwtYVxmUiBcZkJcLVwtcmVsYXRlZFwtY3B1c1xmUgorRGV0ZXJtaW5lcyB3aGljaCBDUFVzIHJ1biBhdCB0aGUgc2FtZSBoYXJkd2FyZSBmcmVxdWVuY3kuCisuVFAgIAorXGZCXC1hXGZSIFxmQlwtXC1hZmZlY3RlZFwtY3B1c1xmUgorRGV0ZXJtaW5lcyB3aGljaCBDUFVzIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3kgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmUuCisuVFAgIAorXGZCXC1zXGZSIFxmQlwtXC1zdGF0c1xmUgorU2hvd3MgY3B1ZnJlcSBzdGF0aXN0aWNzIGlmIGF2YWlsYWJsZS4KKy5UUCAgCitcZkJcLXlcZlIgXGZCXC1cLWxhdGVuY3lcZlIKK0RldGVybWluZXMgdGhlIG1heGltdW0gbGF0ZW5jeSBvbiBDUFUgZnJlcXVlbmN5IGNoYW5nZXMuCisuVFAgIAorXGZCXC1vXGZSIFxmQlwtXC1wcm9jXGZSCitQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jL2NwdWZyZXEgaW50ZXJmYWNlIGluIDIuNC4gYW5kIGVhcmx5IDIuNi4ga2VybmVscy4KKy5UUCAgCitcZkJcLW1cZlIgXGZCXC1cLWh1bWFuXGZSCitodW1hblwtcmVhZGFibGUgb3V0cHV0IGZvciB0aGUgXC1mLCBcLXcsIFwtcyBhbmQgXC15IHBhcmFtZXRlcnMuCisuVFAgIAorXGZCXC1oXGZSIFxmQlwtXC1oZWxwXGZSCitQcmludHMgb3V0IHRoZSBoZWxwIHNjcmVlbi4KKy5TSCAiUkVNQVJLUyIKKy5MUCAKK0J5IGRlZmF1bHQgb25seSB2YWx1ZXMgb2YgY29yZSB6ZXJvIGFyZSBkaXNwbGF5ZWQuIEhvdyB0byBkaXNwbGF5IHNldHRpbmdzIG9mCitvdGhlciBjb3JlcyBpcyBkZXNjcmliZWQgaW4gdGhlIGNwdXBvd2VyKDEpIG1hbnBhZ2UgaW4gdGhlIFwtXC1jcHUgb3B0aW9uIHNlY3Rpb24uCisuTFAgCitZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIG9mIHRoZSBvdXRwdXQgc3BlY2lmaWMgb3B0aW9ucyBcLW8gXC1lIFwtYSBcLWcgXC1wIFwtZCBcLWwgXC13IFwtZiBcLXkuCisuTFAgCitZb3UgYWxzbyBjYW4ndCBzcGVjaWZ5IHRoZSBcLW8gb3B0aW9uIGNvbWJpbmVkIHdpdGggdGhlIFwtYyBvcHRpb24uCisuU0ggIkZJTEVTIgorLm5mIAorXGZJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Ki9jcHVmcmVxL1xmUCAgCitcZkkvcHJvYy9jcHVmcmVxXGZQIChkZXByZWNhdGVkKSAKK1xmSS9wcm9jL3N5cy9jcHUvXGZQIChkZXByZWNhdGVkKQorLmZpIAorLlNIICJBVVRIT1JTIgorLm5mCitEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+IFwtIGF1dGhvciAKK01hdHRpYSBEb25naWxpPG1hbGF0dGlhQGdtYWlsLmNvbT4gXC0gZmlyc3QgYXV0b2xpYnRvb2xpemF0aW9uCisuZmkKKy5TSCAiU0VFIEFMU08iCisuTFAgCitjcHVwb3dlclwtZnJlcXVlbmN5XC1zZXQoMSksIGNwdXBvd2VyKDEpCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItZnJlcXVlbmN5LXNldC4xIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLWZyZXF1ZW5jeS1zZXQuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmUzZTEzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLWZyZXF1ZW5jeS1zZXQuMQpAQCAtMCwwICsxLDU0IEBACisuVEggImNwdWZyZXEtc2V0IiAiMSIgIjAuMSIgIk1hdHRpYSBEb25naWxpIiAiIgorLlNIICJOQU1FIgorLkxQIAorY3B1ZnJlcVwtc2V0IFwtIEEgc21hbGwgdG9vbCB3aGljaCBhbGxvd3MgdG8gbW9kaWZ5IGNwdWZyZXEgc2V0dGluZ3MuCisuU0ggIlNZTlRBWCIKKy5MUCAKK2NwdWZyZXFcLXNldCBbXGZJb3B0aW9uc1xmUF0KKy5TSCAiREVTQ1JJUFRJT04iCisuTFAgCitjcHVmcmVxXC1zZXQgYWxsb3dzIHlvdSB0byBtb2RpZnkgY3B1ZnJlcSBzZXR0aW5ncyB3aXRob3V0IGhhdmluZyB0byB0eXBlIGUuZy4gIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9zY2FsaW5nX3NldF9zcGVlZCIgYWxsIHRoZSB0aW1lLgorLlNIICJPUFRJT05TIgorLkxQIAorLlRQIAorXGZCXC1kXGZSIFxmQlwtXC1taW5cZlIgPEZSRVE+CituZXcgbWluaW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgc2VsZWN0LgorLlRQIAorXGZCXC11XGZSIFxmQlwtXC1tYXhcZlIgPEZSRVE+CituZXcgbWF4aW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgc2VsZWN0LgorLlRQIAorXGZCXC1nXGZSIFxmQlwtXC1nb3Zlcm5vclxmUiA8R09WPgorbmV3IGNwdWZyZXEgZ292ZXJub3IuCisuVFAgCitcZkJcLWZcZlIgXGZCXC1cLWZyZXFcZlIgPEZSRVE+CitzcGVjaWZpYyBmcmVxdWVuY3kgdG8gYmUgc2V0LiBSZXF1aXJlcyB1c2Vyc3BhY2UgZ292ZXJub3IgdG8gYmUgYXZhaWxhYmxlIGFuZCBsb2FkZWQuCisuVFAgCitcZkJcLXJcZlIgXGZCXC1cLXJlbGF0ZWRcZlIKK21vZGlmeSBhbGwgaGFyZHdhcmUtcmVsYXRlZCBDUFVzIGF0IHRoZSBzYW1lIHRpbWUKKy5UUCAKK1xmQlwtaFxmUiBcZkJcLVwtaGVscFxmUgorUHJpbnRzIG91dCB0aGUgaGVscCBzY3JlZW4uCisuU0ggIlJFTUFSS1MiCisuTFAgCitCeSBkZWZhdWx0IHZhbHVlcyBhcmUgYXBwbGllZCBvbiBhbGwgY29yZXMuIEhvdyB0byBtb2RpZnkgc2luZ2xlIGNvcmUKK2NvbmZpZ3VyYXRpb25zIGlzIGRlc2NyaWJlZCBpbiB0aGUgY3B1cG93ZXIoMSkgbWFucGFnZSBpbiB0aGUgXC1cLWNwdSBvcHRpb24gc2VjdGlvbi4KKy5MUCAKK1RoZSBcLWYgRlJFUSwgXC1cLWZyZXEgRlJFUSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyIHBhcmFtZXRlci4KKy5MUCAKK0ZSRVF1ZW5jaWVzIGNhbiBiZSBwYXNzZWQgaW4gSHosIGtIeiAoZGVmYXVsdCksIE1IeiwgR0h6LCBvciBUSHogYnkgcG9zdGZpeGluZyB0aGUgdmFsdWUgd2l0aCB0aGUgd2FudGVkIHVuaXQgbmFtZSwgd2l0aG91dCBhbnkgc3BhY2UgKGZyZXF1ZW5jeSBpbiBrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLgorLkxQIAorT24gTGludXgga2VybmVscyB1cCB0byAyLjYuMjksIHRoZSBcLXIgb3IgXC1cLXJlbGF0ZWQgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCisuU0ggIkZJTEVTIiAKKy5uZgorXGZJL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Ki9jcHVmcmVxL1xmUCAgCitcZkkvcHJvYy9jcHVmcmVxXGZQIChkZXByZWNhdGVkKSAKK1xmSS9wcm9jL3N5cy9jcHUvXGZQIChkZXByZWNhdGVkKQorLmZpIAorLlNIICJBVVRIT1JTIgorLm5mIAorRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiBcLSBhdXRob3IgCitNYXR0aWEgRG9uZ2lsaTxtYWxhdHRpYUBnbWFpbC5jb20+IFwtIGZpcnN0IGF1dG9saWJ0b29saXphdGlvbgorLmZpCisuU0ggIlNFRSBBTFNPIgorLkxQIAorY3B1cG93ZXJcLWZyZXF1ZW5jeVwtaW5mbygxKSwgY3B1cG93ZXIoMSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1pbmZvLjEgYi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItaW5mby4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZTIxMTkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItaW5mby4xCkBAIC0wLDAgKzEsMTkgQEAKKy5USCBDUFVQT1dFUlwtSU5GTyAiMSIgIjIyLzAyLzIwMTEiICIiICJjcHVwb3dlciBNYW51YWwiCisuU0ggTkFNRQorY3B1cG93ZXJcLWluZm8gXC0gU2hvd3MgcHJvY2Vzc29yIHBvd2VyIHJlbGF0ZWQga2VybmVsIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zCisuU0ggU1lOT1BTSVMKKy5mdCBCCisuQiBjcHVwb3dlciBpbmZvIFsgXC1iIF0gWyBcLXMgXSBbIFwtbSBdCisKKy5TSCBERVNDUklQVElPTgorXGZCY3B1cG93ZXIgaW5mbyBcZlAgc2hvd3Mga2VybmVsIGNvbmZpZ3VyYXRpb25zIG9yIHByb2Nlc3NvciBoYXJkd2FyZQorcmVnaXN0ZXJzIGFmZmVjdGluZyBwcm9jZXNzb3IgcG93ZXIgc2F2aW5nIHBvbGljaWVzLgorCitTb21lIG9wdGlvbnMgYXJlIHBsYXRmb3JtIHdpZGUsIHNvbWUgYWZmZWN0IHNpbmdsZSBjb3Jlcy4gQnkgZGVmYXVsdCB2YWx1ZXMKK29mIGNvcmUgemVybyBhcmUgZGlzcGxheWVkIG9ubHkuIGNwdXBvd2VyIC0tY3B1IGFsbCBjcHVpbmZvIHdpbGwgc2hvdyB0aGUKK3NldHRpbmdzIG9mIGFsbCBjb3Jlcywgc2VlIGNwdXBvd2VyKDEpIGhvdyB0byBjaG9vc2Ugc3BlY2lmaWMgY29yZXMuCisKKy5TSCAiU0VFIEFMU08iCitPcHRpb25zIGFyZSBkZXNjcmliZWQgaW4gZGV0YWlsIGluOgorCitjcHVwb3dlcigxKSwgY3B1cG93ZXItc2V0KDEpCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItbW9uaXRvci4xIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLW1vbml0b3IuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWNmYTI2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLW1vbml0b3IuMQpAQCAtMCwwICsxLDE3OSBAQAorLlRIIENQVVBPV0VSXC1NT05JVE9SICIxIiAiMjIvMDIvMjAxMSIgIiIgImNwdXBvd2VyIE1hbnVhbCIKKy5TSCBOQU1FCitjcHVwb3dlclwtbW9uaXRvciBcLSBSZXBvcnQgcHJvY2Vzc29yIGZyZXF1ZW5jeSBhbmQgaWRsZSBzdGF0aXN0aWNzCisuU0ggU1lOT1BTSVMKKy5mdCBCCisuQiBjcHVwb3dlciBtb25pdG9yCisuUkIgIlwtbCIKKworLkIgY3B1cG93ZXIgbW9uaXRvcgorLlJCIFsgIlwtbSA8bW9uMT4sIiBbICI8bW9uMj4sLi4uIiBdIF0KKy5SQiBbICJcLWkgc2Vjb25kcyIgXQorLmJyCisuQiBjcHVwb3dlciBtb25pdG9yCisuUkIgWyAiXC1tIDxtb24xPiwiIFsgIjxtb24yPiwuLi4iIF0gXQorLlJCIGNvbW1hbmQKKy5icgorLlNIIERFU0NSSVBUSU9OCitcZkJjcHVwb3dlci1tb25pdG9yIFxmUCByZXBvcnRzIHByb2Nlc3NvciB0b3BvbG9neSwgZnJlcXVlbmN5IGFuZCBpZGxlIHBvd2VyCitzdGF0ZSBzdGF0aXN0aWNzLiBFaXRoZXIgXGZCY29tbWFuZFxmUCBpcyBmb3JrZWQgYW5kCitzdGF0aXN0aWNzIGFyZSBwcmludGVkIHVwb24gaXRzIGNvbXBsZXRpb24sIG9yIHN0YXRpc3RpY3MgYXJlIHByaW50ZWQgcGVyaW9kaWNhbGx5LgorCitcZkJjcHVwb3dlci1tb25pdG9yIFxmUCBpbXBsZW1lbnRzIGluZGVwZW5kZW50IHByb2Nlc3NvciBzbGVlcCBzdGF0ZSBhbmQKK2ZyZXF1ZW5jeSBjb3VudGVycy4gU29tZSBhcmUgcmV0cmlldmVkIGZyb20ga2VybmVsIHN0YXRpc3RpY3MsIHNvbWUgYXJlCitkaXJlY3RseSByZWFkaW5nIG91dCBoYXJkd2FyZSByZWdpc3RlcnMuIFVzZSBcLWwgdG8gZ2V0IGFuIG92ZXJ2aWV3IHdoaWNoIGFyZQorc3VwcG9ydGVkIG9uIHlvdXIgc3lzdGVtLgorCisuU0ggT3B0aW9ucworLlBQCitcLWwKKy5SUyA0CitMaXN0IGF2YWlsYWJsZSBtb25pdG9ycyBvbiB5b3VyIHN5c3RlbS4gQWRkaXRpb25hbCBkZXRhaWxzIGFib3V0IGVhY2ggbW9uaXRvcgorYXJlIHNob3duOgorLlJTIDIKKy5JUCBcKGJ1CitUaGUgbmFtZSBpbiBxdW90YXRpb24gbWFya3Mgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byB0aGUgXC1tIHBhcmFtZXRlci4KKy5JUCBcKGJ1CitUaGUgbnVtYmVyIG9mIGRpZmZlcmVudCBjb3VudGVycyB0aGUgbW9uaXRvciBzdXBwb3J0cyBpbiBicmFja2V0cy4KKy5JUCBcKGJ1CitUaGUgYW1vdW50IG9mIHRpbWUgaW4gc2Vjb25kcyB0aGUgY291bnRlcnMgbWlnaHQgb3ZlcmZsb3csIGR1ZSB0bworaW1wbGVtZW50YXRpb24gY29uc3RyYWludHMuCisuSVAgXChidQorVGhlIG5hbWUgYW5kIGEgZGVzY3JpcHRpb24gb2YgZWFjaCBjb3VudGVyIGFuZCBpdHMgcHJvY2Vzc29yIGhpZXJhcmNoeSBsZXZlbAorY292ZXJhZ2UgaW4gc3F1YXJlIGJyYWNrZXRzOgorLlJTIDQKKy5JUCBcKGJ1CitbVF0gXC0+IFRocmVhZAorLklQIFwoYnUKK1tDXSBcLT4gQ29yZQorLklQIFwoYnUKK1tQXSBcLT4gUHJvY2Vzc29yIFBhY2thZ2UgKFNvY2tldCkKKy5JUCBcKGJ1CitbTV0gXC0+IE1hY2hpbmUvUGxhdGZvcm0gd2lkZSBjb3VudGVyCisuUkUKKy5SRQorLlJFCisuUFAKK1wtbSA8bW9uMT4sPG1vbjI+LC4uLgorLlJTIDQKK09ubHkgZGlzcGxheSBzcGVjaWZpYyBtb25pdG9ycy4gVXNlIHRoZSBtb25pdG9yIHN0cmluZyhzKSBwcm92aWRlZCBieSBcLWwgb3B0aW9uLgorLlJFCisuUFAKK1wtaSBzZWNvbmRzCisuUlMgNAorTWVhc3VyZSBpbnRlcnZhbGwuCisuUkUKKy5QUAorY29tbWFuZAorLlJTIDQKK01lYXN1cmUgaWRsZSBhbmQgZnJlcXVlbmN5IGNoYXJhY3RlcmlzdGljcyBvZiBhbiBhcmJpdHJhcnkgY29tbWFuZC93b3JrbG9hZC4KK1RoZSBleGVjdXRhYmxlIFxmQmNvbW1hbmRcZlAgaXMgZm9ya2VkIGFuZCB1cG9uIGl0cyBleGl0LCBzdGF0aXN0aWNzIGdhdGhlcmVkIHNpbmNlIGl0IHdhcworZm9ya2VkIGFyZSBkaXNwbGF5ZWQuCisuUkUKKy5QUAorXC12CisuUlMgNAorSW5jcmVhc2UgdmVyYm9zaXR5IGlmIHRoZSBiaW5hcnkgd2FzIGNvbXBpbGVkIHdpdGggdGhlIERFQlVHIG9wdGlvbiBzZXQuCisuUkUKKworLlNIIE1PTklUT1IgREVTQ1JJUFRJT05TCisuU1MgIklkbGVfU3RhdHMiCitTaG93cyBzdGF0aXN0aWNzIG9mIHRoZSBjcHVpZGxlIGtlcm5lbCBzdWJzeXN0ZW0uIFZhbHVlcyBhcmUgcmV0cmlldmVkIGZyb20KKy9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY3B1aWRsZS9zdGF0ZSovLgorVGhlIGtlcm5lbCB1cGRhdGVzIHRoZXNlIHZhbHVlcyBldmVyeSB0aW1lIGFuIGlkbGUgc3RhdGUgaXMgZW50ZXJlZCBvcgorbGVmdC4gVGhlcmVmb3JlIHRoZXJlIGNhbiBiZSBzb21lIGluYWNjdXJhY3kgd2hlbiBjb3JlcyBhcmUgaW4gYW4gaWRsZQorc3RhdGUgZm9yIHNvbWUgdGltZSB3aGVuIHRoZSBtZWFzdXJlIHN0YXJ0cyBvciBlbmRzLiBJbiB3b3JzdCBjYXNlIGl0IGNhbiBoYXBwZW4KK3RoYXQgb25lIGNvcmUgc3RheWVkIGluIGFuIGlkbGUgc3RhdGUgZm9yIHRoZSB3aG9sZSBtZWFzdXJlIHRpbWUgYW5kIHRoZSBpZGxlCitzdGF0ZSB1c2FnZSB0aW1lIGFzIGV4cG9ydGVkIGJ5IHRoZSBrZXJuZWwgZGlkIG5vdCBnZXQgdXBkYXRlZC4gSW4gdGhpcyBjYXNlCithIHN0YXRlIHJlc2lkZW5jeSBvZiAwIHBlcmNlbnQgaXMgc2hvd24gd2hpbGUgaXQgd2FzIDEwMC4KKworLlNTICJNcGVyZiIKK1RoZSBuYW1lIGNvbWVzIGZyb20gdGhlIGFwZXJmL21wZXJmIChhdmVyYWdlIGFuZCBtYXhpbXVtKSBNU1IgcmVnaXN0ZXJzIHVzZWQKK3doaWNoIGFyZSBhdmFpbGFibGUgb24gcmVjZW50IFg4NiBwcm9jZXNzb3JzLiBJdCBzaG93cyB0aGUgYXZlcmFnZSBmcmVxdWVuY3kKKyhpbmNsdWRpbmcgYm9vc3QgZnJlcXVlbmNpZXMpLgorVGhlIGZhY3QgdGhhdCBvbiBhbGwgcmVjZW50IGhhcmR3YXJlIHRoZSBtcGVyZiB0aW1lciBzdG9wcyB0aWNraW5nIGluIGFueSBpZGxlCitzdGF0ZSBpdCBpcyBhbHNvIHVzZWQgdG8gc2hvdyBDMCAocHJvY2Vzc29yIGlzIGFjdGl2ZSkgYW5kIEN4IChwcm9jZXNzb3IgaXMgaW4KK2FueSBzbGVlcCBzdGF0ZSkgdGltZXMuIFRoZXNlIGNvdW50ZXJzIGRvIG5vdCBoYXZlIHRoZSBpbmFjY3VyYWN5IHJlc3RyaWN0aW9ucwordGhlICJJZGxlX1N0YXRzIiBjb3VudGVycyBtYXkgc2hvdy4KK01heSB3b3JrIHBvb3JseSBvbiBMaW51eC0yLjYuMjAgdGhyb3VnaCAyLjYuMjksIGFzIHRoZSBcZkJhY3BpLWNwdWZyZXEgXGZQCitrZXJuZWwgZnJlcXVlbmN5IGRyaXZlciBwZXJpb2RpY2FsbHkgY2xlYXJlZCBhcGVyZi9tcGVyZiByZWdpc3RlcnMgaW4gdGhvc2UKK2tlcm5lbHMuCisKKy5TUyAiTmVoYWxlbSIgIlNhbmR5QnJpZGdlIgorSW50ZWwgQ29yZSBhbmQgUGFja2FnZSBzbGVlcCBzdGF0ZSBjb3VudGVycy4KK1RocmVhZHMgKGh5cGVydGhyZWFkZWQgY29yZXMpIG1heSBub3QgYmUgYWJsZSB0byBlbnRlciBkZWVwZXIgY29yZSBzdGF0ZXMgaWYKK2l0cyBzaWJsaW5nIGlzIHV0aWxpemVkLgorRGVlcGVzdCBwYWNrYWdlIHNsZWVwIHN0YXRlcyBtYXkgaW4gcmVhbGl0eSBzaG93IHVwIGFzIG1hY2hpbmUvcGxhdGZvcm0gd2lkZQorc2xlZXAgc3RhdGVzIGFuZCBjYW4gb25seSBiZSBlbnRlcmVkIGlmIGFsbCBjb3JlcyBhcmUgaWRsZS4gTG9vayB1cCBJbnRlbAorbWFudWFscyAoc29tZSBhcmUgcHJvdmlkZWQgaW4gdGhlIFJlZmVyZW5jZXMgc2VjdGlvbikgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKworLlNTICJPbnRhcmlvIiAiTGlhbm8iCitBTUQgbGFwdG9wIGFuZCBkZXNrdG9wIHByb2Nlc3NvciAoZmFtaWx5IDEyaCBhbmQgMTRoKSBzbGVlcCBzdGF0ZSBjb3VudGVycy4KK1RoZSByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkIHZpYSBQQ0kgYW5kIHRoZXJlZm9yZSBjYW4gc3RpbGwgYmUgcmVhZCBvdXQgd2hpbGUKK2NvcmVzIGhhdmUgYmVlbiBvZmZsaW5lZC4KKworVGhlcmUgaXMgb25lIHNwZWNpYWwgY291bnRlcjogTkJQMSAoTm9ydGggQnJpZGdlIFAxKS4KK1RoaXMgb25lIGFsd2F5cyByZXR1cm5zIDAgb3IgMSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIE5vcnRoIEJyaWRnZSBQMQorcG93ZXIgc3RhdGUgZ290IGVudGVyZWQgYXQgbGVhc3Qgb25jZSBkdXJpbmcgbWVhc3VyZSB0aW1lLgorQmVpbmcgYWJsZSB0byBlbnRlciBOQlAxIHN0YXRlIGFsc28gZGVwZW5kcyBvbiBncmFwaGljcyBwb3dlciBtYW5hZ2VtZW50LgorVGhlcmVmb3JlIHRoaXMgY291bnRlciBjYW4gYmUgdXNlZCB0byB2ZXJpZnkgd2hldGhlciB0aGUgZ3JhcGhpY3MnIGRyaXZlcgorcG93ZXIgbWFuYWdlbWVudCBpcyB3b3JraW5nIGFzIGV4cGVjdGVkLgorCisuU0ggRVhBTVBMRVMKKworY3B1cG93ZXIgbW9uaXRvciAtbCIgbWF5IHNob3c6CisuUlMgNAorTW9uaXRvciAiTXBlcmYiICgzIHN0YXRlcykgXC0gTWlnaHQgb3ZlcmZsb3cgYWZ0ZXIgOTIyMDAwMDAwIHMKKworICAgLi4uCisKK01vbml0b3IgIklkbGVfU3RhdHMiICgzIHN0YXRlcykgXC0gTWlnaHQgb3ZlcmZsb3cgYWZ0ZXIgNDI5NDk2NzI5NSBzCisKKyAgIC4uLgorCisuUkUKK2NwdXBvd2VyIG1vbml0b3IgXC1tICJJZGxlX1N0YXRzLE1wZXJmIiBzY3AgL3RtcC90ZXN0IC9uZnMvdG1wCisKK01vbml0b3IgdGhlIHNjcCBjb21tYW5kLCBzaG93IGJvdGggTXBlcmYgYW5kIElkbGVfU3RhdHMgc3RhdGVzIGNvdW50ZXIKK3N0YXRpc3RpY3MsIGJ1dCBpbiBleGNoYW5nZWQgb3JkZXIuCisKKworCisuUkUKK0JlIGNhcmVmdWwgdGhhdCB0aGUgdHlwaWNhbCBjb21tYW5kIHRvIGZ1bGx5IHV0aWxpemUgb25lIENQVSBieSBkb2luZzoKKworY3B1cG93ZXIgbW9uaXRvciBjYXQgL2Rldi96ZXJvID4vZGV2L251bGwKKworRG9lcyBub3Qgd29yayBhcyBleHBlY3RlZCwgYmVjYXVzZSB0aGUgbWVhc3VyZWQgb3V0cHV0IGlzIHJlZGlyZWN0ZWQgdG8KKy9kZXYvbnVsbC4gVGhpcyBjb3VsZCBnZXQgd29ya2Fyb3VuZGVkIGJ5IHB1dHRpbmcgdGhlIGxpbmUgaW50byBhbiBvd24sIHRpbnkKK3NoZWxsIHNjcmlwdC4gSGl0IENUUkxcLWMgdG8gdGVybWluYXRlIHRoZSBjb21tYW5kIGFuZCBnZXQgdGhlIG1lYXN1cmUgb3V0cHV0CitkaXNwbGF5ZWQuCisKKy5TSCBSRUZFUkVOQ0VTCisiQklPUyBhbmQgS2VybmVsIERldmVsb3BlcuKAmXMgR3VpZGUgKEJLREcpIGZvciBBTUQgRmFtaWx5IDE0aCBQcm9jZXNzb3JzIgoraHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9Qcm9jZXNzb3JfVGVjaERvY3MvNDMxNzAucGRmCisKKyJJbnRlbMKuIFR1cmJvIEJvb3N0IFRlY2hub2xvZ3kKK2luIEludGVswq4gQ29yZeKEoiBNaWNyb2FyY2hpdGVjdHVyZSAoTmVoYWxlbSkgQmFzZWQgUHJvY2Vzc29ycyIKK2h0dHA6Ly9kb3dubG9hZC5pbnRlbC5jb20vZGVzaWduL3Byb2Nlc3Nvci9hcHBsbm90cy8zMjAzNTQucGRmCisKKyJJbnRlbMKuIDY0IGFuZCBJQS0zMiBBcmNoaXRlY3R1cmVzIFNvZnR3YXJlIERldmVsb3BlcidzIE1hbnVhbAorVm9sdW1lIDNCOiBTeXN0ZW0gUHJvZ3JhbW1pbmcgR3VpZGUiCitodHRwOi8vd3d3LmludGVsLmNvbS9wcm9kdWN0cy9wcm9jZXNzb3IvbWFudWFscworCisuU0ggRklMRVMKKy50YQorLm5mCisvZGV2L2NwdS8qL21zcgorL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1Ki9jcHVpZGxlL3N0YXRlKi8uCisuZmkKKworLlNIICJTRUUgQUxTTyIKK3Bvd2VydG9wKDgpLCBtc3IoNCksIHZtc3RhdCg4KQorLlBQCisuU0ggQVVUSE9SUworLm5mCitXcml0dGVuIGJ5IFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+CisKK05laGFsZW0sIFNhbmR5QnJpZGdlIG1vbml0b3JzIGFuZCBjb21tYW5kIHBhc3NpbmcKK2Jhc2VkIG9uIHR1cmJvc3RhdC44IGZyb20gTGVuIEJyb3duIDxsZW4uYnJvd25AaW50ZWwuY29tPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLXNldC4xIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLXNldC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTU0YTkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItc2V0LjEKQEAgLTAsMCArMSwxMDMgQEAKKy5USCBDUFVQT1dFUlwtU0VUICIxIiAiMjIvMDIvMjAxMSIgIiIgImNwdXBvd2VyIE1hbnVhbCIKKy5TSCBOQU1FCitjcHVwb3dlclwtc2V0IFwtIFNldCBwcm9jZXNzb3IgcG93ZXIgcmVsYXRlZCBrZXJuZWwgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMKKy5TSCBTWU5PUFNJUworLmZ0IEIKKy5CIGNwdXBvd2VyIHNldCBbIFwtYiBWQUwgXSBbIFwtcyBWQUwgXSBbIFwtbSBWQUwgXQorCisKKy5TSCBERVNDUklQVElPTgorXGZCY3B1cG93ZXIgc2V0IFxmUCBzZXRzIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBkaXJlY3RseSBhY2Nlc3NlcyBoYXJkd2FyZQorcmVnaXN0ZXJzIGFmZmVjdGluZyBwcm9jZXNzb3IgcG93ZXIgc2F2aW5nIHBvbGljaWVzLgorCitTb21lIG9wdGlvbnMgYXJlIHBsYXRmb3JtIHdpZGUsIHNvbWUgYWZmZWN0IHNpbmdsZSBjb3Jlcy4gQnkgZGVmYXVsdCB2YWx1ZXMKK2FyZSBhcHBsaWVkIG9uIGFsbCBjb3Jlcy4gSG93IHRvIG1vZGlmeSBzaW5nbGUgY29yZSBjb25maWd1cmF0aW9ucyBpcworZGVzY3JpYmVkIGluIHRoZSBjcHVwb3dlcigxKSBtYW5wYWdlIGluIHRoZSBcLVwtY3B1IG9wdGlvbiBzZWN0aW9uLiBXaGV0aGVyIGFuCitvcHRpb24gYWZmZWN0cyB0aGUgd2hvbGUgc3lzdGVtIG9yIGNhbiBiZSBhcHBsaWVkIHRvIGluZGl2aWR1YWwgY29yZXMgaXMKK2Rlc2NyaWJlZCBpbiB0aGUgT3B0aW9ucyBzZWN0aW9ucy4KKworVXNlIFxmQmNwdXBvd2VyIGluZm8gXGZQIHRvIHJlYWQgb3V0IGN1cnJlbnQgc2V0dGluZ3MgYW5kIHdoZXRoZXIgdGhleSBhcmUKK3N1cHBvcnRlZCBvbiB0aGUgc3lzdGVtIGF0IGFsbC4KKworLlNIIE9wdGlvbnMKKy5QUAorXC1cLXBlcmYtYmlhcywgXC1iCisuUlMgNAorU2V0cyBhIHJlZ2lzdGVyIG9uIHN1cHBvcnRlZCBJbnRlbCBwcm9jZXNzb3JlIHdoaWNoIGFsbG93cyBzb2Z0d2FyZSB0byBjb252ZXkKK2l0cyBwb2xpY3kgZm9yIHRoZSByZWxhdGl2ZSBpbXBvcnRhbmNlIG9mIHBlcmZvcm1hbmNlIHZlcnN1cyBlbmVyZ3kgc2F2aW5ncyB0bwordGhlICBwcm9jZXNzb3IuCisKK1RoZSByYW5nZSBvZiB2YWxpZCBudW1iZXJzIGlzIDAtMTUsIHdoZXJlIDAgaXMgbWF4aW11bQorcGVyZm9ybWFuY2UgYW5kIDE1IGlzIG1heGltdW0gZW5lcmd5IGVmZmljaWVuY3kuCisKK1RoZSBwcm9jZXNzb3IgdXNlcyB0aGlzIGluZm9ybWF0aW9uIGluIG1vZGVsLXNwZWNpZmljIHdheXMKK3doZW4gaXQgbXVzdCBzZWxlY3QgdHJhZGUtb2ZmcyBiZXR3ZWVuIHBlcmZvcm1hbmNlIGFuZAorZW5lcmd5IGVmZmljaWVuY3kuCisKK1RoaXMgcG9saWN5IGhpbnQgZG9lcyBub3Qgc3VwZXJzZWRlIFByb2Nlc3NvciBQZXJmb3JtYW5jZSBzdGF0ZXMKKyhQLXN0YXRlcykgb3IgQ1BVIElkbGUgcG93ZXIgc3RhdGVzIChDLXN0YXRlcyksIGJ1dCBhbGxvd3MKK3NvZnR3YXJlIHRvIGhhdmUgaW5mbHVlbmNlIHdoZXJlIGl0IHdvdWxkIG90aGVyd2lzZSBiZSB1bmFibGUKK3RvIGV4cHJlc3MgYSBwcmVmZXJlbmNlLgorCitGb3IgZXhhbXBsZSwgdGhpcyBzZXR0aW5nIG1heSB0ZWxsIHRoZSBoYXJkd2FyZSBob3cKK2FnZ3Jlc3NpdmVseSBvciBjb25zZXJ2YXRpdmVseSB0byBjb250cm9sIGZyZXF1ZW5jeQoraW4gdGhlICJ0dXJibyByYW5nZSIgYWJvdmUgdGhlIGV4cGxpY2l0bHkgT1MtY29udHJvbGxlZAorUC1zdGF0ZSBmcmVxdWVuY3kgcmFuZ2UuICBJdCBtYXkgYWxzbyB0ZWxsIHRoZSBoYXJkd2FyZQoraG93IGFnZ3Jlc3NpdmVseSBpdCBzaG91bGQgZW50ZXIgdGhlIE9TIHJlcXVlc3RlZCBDLXN0YXRlcy4KKworVGhpcyBvcHRpb24gY2FuIGJlIGFwcGxpZWQgdG8gaW5kaXZpZHVhbCBjb3JlcyBvbmx5IHZpYSB0aGUgXC1cLWNwdSBvcHRpb24sCitjcHVwb3dlcigxKS4KKworU2V0dGluZyB0aGUgcGVyZm9ybWFuY2UgYmlhcyB2YWx1ZSBvbiBvbmUgQ1BVIGNhbiBtb2RpZnkgdGhlIHNldHRpbmcgb24KK3JlbGF0ZWQgQ1BVcyBhcyB3ZWxsIChmb3IgZXhhbXBsZSBhbGwgQ1BVcyBvbiBvbmUgc29ja2V0KSwgYmVjYXVzZSBvZgoraGFyZHdhcmUgcmVzdHJpY3Rpb25zLgorVXNlIFxmQmNwdXBvd2VyIC1jIGFsbCBpbmZvIC1iXGZQIHRvIHZlcmlmeS4KKworVGhpcyBvcHRpb25zIG5lZWRzIHRoZSBtc3Iga2VybmVsIGRyaXZlciAoQ09ORklHX1g4Nl9NU1IpIGxvYWRlZC4KKy5SRQorLlBQCitcLVwtc2NoZWRcLW1jLCAgXC1tIFsgVkFMIF0KKy5SRQorXC1cLXNjaGVkXC1zbXQsIFwtcyBbIFZBTCBdCisuUlMgNAorXC1cLXNjaGVkXC1tYyB1dGlsaXplcyBjb3JlcyBpbiBvbmUgcHJvY2Vzc29yIHBhY2thZ2Uvc29ja2V0IGZpcnN0IGJlZm9yZQorcHJvY2Vzc2VzIGFyZSBzY2hlZHVsZWQgdG8gb3RoZXIgcHJvY2Vzc29yIHBhY2thZ2VzL3NvY2tldHMuCisKK1wtXC1zY2hlZFwtc210IHV0aWxpemVzIHRocmVhZCBzaWJsaW5ncyBvZiBvbmUgcHJvY2Vzc29yIGNvcmUgZmlyc3QgYmVmb3JlCitwcm9jZXNzZXMgYXJlIHNjaGVkdWxlZCB0byBvdGhlciBjb3Jlcy4KKworVGhlIGltcGFjdCBvbiBwb3dlciBjb25zdW1wdGlvbiBhbmQgcGVyZm9ybWFuY2UgKHBvc2l0aXYgb3IgbmVnYXRpdikgaGVhdmlseQorZGVwZW5kcyBvbiBwcm9jZXNzb3Igc3VwcG9ydCBmb3IgZGVlcCBzbGVlcCBzdGF0ZXMsIGZyZXF1ZW5jeSBzY2FsaW5nIGFuZAorZnJlcXVlbmN5IGJvb3N0IG1vZGVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgYmV0d2VlbiBvdGhlciB0aHJlYWQgc2libGluZ3MKK2FuZCBwcm9jZXNzb3IgY29yZXMuCisKK1Rha2VuIG92ZXIgZnJvbSBrZXJuZWwgZG9jdW1lbnRhdGlvbjoKKworQWRqdXN0IHRoZSBrZXJuZWwncyBtdWx0aS1jb3JlIHNjaGVkdWxlciBzdXBwb3J0LgorCitQb3NzaWJsZSB2YWx1ZXMgYXJlOgorLlJTIDIKKzAgLSBObyBwb3dlciBzYXZpbmcgbG9hZCBiYWxhbmNlIChkZWZhdWx0IHZhbHVlKQorCisxIC0gRmlsbCBvbmUgdGhyZWFkL2NvcmUvcGFja2FnZSBmaXJzdCBmb3IgbG9uZyBydW5uaW5nIHRocmVhZHMKKworMiAtIEFsc28gYmlhcyB0YXNrIHdha2V1cHMgdG8gc2VtaS1pZGxlIGNwdSBwYWNrYWdlIGZvciBwb3dlcgorc2F2aW5ncworLlJFCisKK3NjaGVkX21jX3Bvd2VyX3NhdmluZ3MgaXMgZGVwZW5kZW50IHVwb24gU0NIRURfTUMsIHdoaWNoIGlzCitpdHNlbGYgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudC4KKworc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MgaXMgZGVwZW5kZW50IHVwb24gU0NIRURfU01ULCB3aGljaAoraXMgaXRzZWxmIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQuCisKK1RoZSB0d28gZmlsZXMgYXJlIGluZGVwZW5kZW50IG9mIGVhY2ggb3RoZXIuIEl0IGlzIHBvc3NpYmxlCit0aGF0IG9uZSBmaWxlIG1heSBiZSBwcmVzZW50IHdpdGhvdXQgdGhlIG90aGVyLgorCisuU0ggIlNFRSBBTFNPIgorY3B1cG93ZXItaW5mbygxKSwgY3B1cG93ZXItbW9uaXRvcigxKSwgcG93ZXJ0b3AoMSkKKy5QUAorLlNIIEFVVEhPUlMKKy5uZgorXC1cLXBlcmZcLWJpYXMgcGFydHMgd3JpdHRlbiBieSBMZW4gQnJvd24gPGxlbi5icm93bkBpbnRlbC5jb20+CitUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLjEgYi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGMyMGZlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLjEKQEAgLTAsMCArMSw3MiBAQAorLlRIIENQVVBPV0VSICIxIiAiMDcvMDMvMjAxMSIgIiIgImNwdXBvd2VyIE1hbnVhbCIKKy5TSCBOQU1FCitjcHVwb3dlciBcLSBTaG93cyBhbmQgc2V0cyBwcm9jZXNzb3IgcG93ZXIgcmVsYXRlZCB2YWx1ZXMKKy5TSCBTWU5PUFNJUworLmZ0IEIKKy5CIGNwdXBvd2VyIFsgXC1jIGNwdWxpc3QgXSBzdWJjb21tYW5kIFtBUkdTXQorCisuQiBjcHVwb3dlciBcLXZ8XC1cLXZlcnNpb24KKworLkIgY3B1cG93ZXIgXC1ofFwtXC1oZWxwCisKKy5TSCBERVNDUklQVElPTgorXGZCY3B1cG93ZXIgXGZQIGlzIGEgY29sbGVjdGlvbiBvZiB0b29scyB0byBleGFtaW5lIGFuZCB0dW5lIHBvd2VyIHNhdmluZworcmVsYXRlZCBmZWF0dXJlcyBvZiB5b3VyIHByb2Nlc3Nvci4KKworVGhlIG1hbnBhZ2VzIG9mIHRoZSBzdWJjb21tYW5kcyAoY3B1cG93ZXJcLTxzdWJjb21tYW5kPigxKSkgcHJvdmlkZSBkZXRhaWxlZAorZGVzY3JpcHRpb25zIG9mIHN1cHBvcnRlZCBmZWF0dXJlcy4gUnVuIFxmQmNwdXBvd2VyIGhlbHBcZlAgdG8gZ2V0IGFuIG92ZXJ2aWV3CitvZiBzdXBwb3J0ZWQgc3ViY29tbWFuZHMuCisKKy5TSCBPcHRpb25zCisuUFAKK1wtXC1oZWxwLCBcLWgKKy5SUyA0CitTaG93cyBzdXBwb3J0ZWQgc3ViY29tbWFuZHMgYW5kIGdlbmVyYWwgdXNhZ2UuCisuUkUKKy5QUAorXC1cLWNwdSBjcHVsaXN0LCAgXC1jIGNwdWxpc3QKKy5SUyA0CitPbmx5IHNob3cgb3Igc2V0IHZhbHVlcyBmb3Igc3BlY2lmaWMgY29yZXMuCitUaGlzIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFsbCBzdWJjb21tYW5kcywgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gdGhlCittYW5wYWdlcyBvZiB0aGUgc3ViY29tbWFuZHMuCisKK1NvbWUgc3ViY29tbWFuZHMgYWNjZXNzIGFsbCBjb3JlcyAodHlwaWNhbGx5IHRoZSAqXC1zZXQgY29tbWFuZHMpLCBzb21lIG9ubHkKK3RoZSBmaXJzdCBjb3JlICh0eXBpY2FsbHkgdGhlICpcLWluZm8gY29tbWFuZHMpIGJ5IGRlZmF1bHQuCisKK1RoZSBzeW50YXggZm9yIDxjcHVsaXN0PiBpcyBiYXNlZCBvbiBob3cgdGhlIGtlcm5lbCBleHBvcnRzIENQVSBiaXRtYXNrcyB2aWEKK3N5c2ZzIGZpbGVzLiBTb21lIGV4YW1wbGVzOgorLlJTIDQKKy5UUCAxNgorSW5wdXQKK0VxdWl2YWxlbnQgdG8KKy5UUAorYWxsCithbGwgY29yZXMKKy5UUAorMFwtMworMCwxLDIsMworLlRQCiswXC03OjIKKzAsMiw0LDYKKy5UUAorMSwzLDUtNworMSwzLDUsNiw3CisuVFAKKzBcLTM6Miw4XC0xNTo0CiswLDIsOCwxMgkKKy5SRQorLlJFCisuUFAKK1wtXC12ZXJzaW9uLCAgXC12CisuUlMgNAorUHJpbnQgdGhlIHBhY2thZ2UgbmFtZSBhbmQgdmVyc2lvbiBudW1iZXIuCisKKy5TSCAiU0VFIEFMU08iCitjcHVwb3dlci1zZXQoMSksIGNwdXBvd2VyLWluZm8oMSksIGNwdXBvd2VyLWlkbGUoMSksCitjcHVwb3dlci1mcmVxdWVuY3ktc2V0KDEpLCBjcHVwb3dlci1mcmVxdWVuY3ktaW5mbygxKSwgY3B1cG93ZXItbW9uaXRvcigxKSwKK3Bvd2VydG9wKDEpCisuUFAKKy5TSCBBVVRIT1JTCisubmYKK1wtXC1wZXJmXC1iaWFzIHBhcnRzIHdyaXR0ZW4gYnkgTGVuIEJyb3duIDxsZW4uYnJvd25AaW50ZWwuY29tPgorVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2NzLnBvIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vY3MucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IyMmM0NQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2NzLnBvCkBAIC0wLDAgKzEsOTQ0IEBACisjIHRyYW5zbGF0aW9uIG9mIGNzLnBvIHRvIEN6ZWNoCisjIEN6ZWNoIHRyYW5zbGF0aW9uIGZvciBjcHVmcmVxdXRpbHMgcGFja2FnZQorIyBDemVjaCBtZXNzYWdlcyBmb3IgY3B1ZnJlcXV0aWxzLgorIyBDb3B5cmlnaHQgKEMpIDIwMDcga2F2b2wKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGNwdWZyZXF1dGlscyBwYWNrYWdlLgorIworIyBLYXJlbCBWb2xuw70gPGthdm9sQHNlem5hbS5jej4sIDIwMDcsIDIwMDguCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBjc1xuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wMy0wOCAxNzowMyswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wNi0xMSAxNjoyNiswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBLYXJlbCBWb2xuw70gPGthdm9sQHNlem5hbS5jej5cbiIKKyJMYW5ndWFnZS1UZWFtOiBDemVjaCA8ZGlza3V6ZUBsaXN0cy5sMTBuLmN6PlxuIgorIkxhbmd1YWdlOiBjc1xuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogIG5wbHVyYWxzPTM7IHBsdXJhbD0obj09MSkgPyAwIDogKG4+PTIgJiYgbjw9NCkgPyAxIDogMjtcbiIKKyJYLUdlbmVyYXRvcjogS0JhYmVsIDEuMTEuNFxuIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzozNgorbXNnaWQgIlByb2Nlc3NvciBDb3JlIEMzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjQzCittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTEKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo1OCB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzAKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzozMworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM3IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzIiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6NDcKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NTYKK21zZ2lkICJQYWNrYWdlIGluIHNsZWVwIHN0YXRlIChQQzEgb3IgZGVlcGVyKSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NjMKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzcKK21zZ2lkICJOb3J0aCBCcmlkZ2UgUDEgYm9vbGVhbiBjb3VudGVyIChyZXR1cm5zIDAgb3IgMSkiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzozNQorbXNnaWQgIlByb2Nlc3NvciBDb3JlIG5vdCBpZGxlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NDIKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBpbiBhbiBpZGxlIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NTAKK21zZ2lkICJBdmVyYWdlIEZyZXF1ZW5jeSAoaW5jbHVkaW5nIGJvb3N0KSBpbiBNSHoiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy1oXSBbIFstdF0gfCBbLWxdIHwgWy1tIDxtb24xPixbPG1vbjI+XSBdIF0gWy1pICIKKyJpbnRlcnZhbF9zZWMgfCAtYyBjb21tYW5kIC4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjcHVwb3dlciBtb25pdG9yOiBbLXZdIFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtdjogYmUgbW9yZSB2ZXJib3NlXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaDogcHJpbnQgdGhpcyBoZWxwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaTogdGltZSBpbnRlcnZhbGwgdG8gbWVhc3VyZSBmb3IgaW4gc2Vjb25kcyAoZGVmYXVsdCAxKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXQ6IHNob3cgQ1BVIHRvcG9sb2d5L2hpZXJhcmNoeVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWw6IGxpc3QgYXZhaWxhYmxlIENQVSBzbGVlcCBtb25pdG9ycyAoZm9yIHVzZSB3aXRoIC1tKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLW06IHNob3cgc3BlY2lmaWMgQ1BVIHNsZWVwIG1vbml0b3JzIG9ubHkgKGluIHNhbWUgb3JkZXIpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib25seSBvbmUgb2Y6IC10LCAtbCwgLW0gYXJlIGFsbG93ZWRcbiIKKyJJZiBub25lIG9mIHRoZW0gaXMgcGFzc2VkLCIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbGwgc3VwcG9ydGVkIG1vbml0b3JzIGFyZSBzaG93blxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgJXMsIENvdW50ZXIgJXMgaGFzIG5vIGNvdW50IGZ1bmN0aW9uLiBJbXBsZW1lbnRhdGlvbiBlcnJvclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqaXMgb2ZmbGluZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtYXggbW9uaXRvciBuYW1lIGxlbmd0aCAoJWQpIGV4Y2VlZGVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWF0Y2hpbmcgbW9uaXRvciBmb3VuZCBpbiAlcywgdHJ5IC1sIG9wdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgXCIlc1wiICglZCBzdGF0ZXMpIC0gTWlnaHQgb3ZlcmZsb3cgYWZ0ZXIgJXUgc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRvb2sgJS41ZiBzZWNvbmRzIGFuZCBleGl0ZWQgd2l0aCBzdGF0dXMgJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVhZCBudW1iZXIgb2YgYXZhaWxhYmxlIHByb2Nlc3NvcnNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgbW9uaXRvciAlcyBuZWVkcyByb290IGFjY2Vzc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIEhXIENzdGF0ZSBtb25pdG9ycyBmb3VuZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3B1cG93ZXIgWyAtYyBjcHVsaXN0IF0gc3ViY29tbWFuZCBbQVJHU11cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIC0tdmVyc2lvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydGVkIHN1YmNvbW1hbmRzIGFyZTpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTb21lIHN1YmNvbW1hbmRzIGNhbiBtYWtlIHVzZSBvZiB0aGUgLWMgY3B1bGlzdCBvcHRpb24uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29rIGF0IHRoZSBnZW5lcmFsIGNwdXBvd2VyIG1hbnBhZ2UgaG93IHRvIHVzZSBpdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5kIHJlYWQgdXAgdGhlIHN1YmNvbW1hbmQncyBtYW5wYWdlIHdoZXRoZXIgaXQgaXMgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlVzZSBjcHVwb3dlciBoZWxwIHN1YmNvbW1hbmQgZm9yIGdldHRpbmcgaGVscCBmb3IgYWJvdmUgc3ViY29tbWFuZHMuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgZXJyb3JzIGFuZCBidWdzIHRvICVzLCBwbGVhc2UuXG4iCittc2dzdHIgIiIKKyJDaHlieSB2IHByb2dyYW11IHByb3PDrW0gaGxhc3RlIG5hICVzIChhbmdsaWNreSkuXG4iCisiQ2h5YnkgdiBwxZlla2xhZHUgcHJvc8OtbSBobGFzdGUgbmEga2F2b2xAc2V6bmFtLmN6ICjEjWVza3kgOy0pXG4iCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHBhcnNpbmcgY3B1IGxpc3RcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJjb21tYW5kICVzIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNvdW50IHRoZSBudW1iZXIgb2YgQ1BVcyAoJXM6ICVzKSwgYXNzdW1pbmcgMVxuIgorbXNnc3RyICJOZWx6ZSB6amlzdGl0IHBvxI1ldCBDUFUgKCVzOiAlcyksIHDFmWVkcG9rbMOhZMOhIHNlIDEuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgICAgICAgICAgbWluaW11bSBDUFUgZnJlcXVlbmN5ICAtICBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIC0gIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKyIgICAgICAgICBtaW5pbcOhbG7DrSBmcmVrdmVuY2UgQ1BVIC0gbWF4aW3DoWxuw60gZnJla3ZlbmNlIENQVSAtICByZWd1bMOhdG9yXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBldmFsdWF0aW5nIEJvb3N0IENhcGFiaWxpdGllcyBvbiBDUFUgJWQgLS0gYXJlIHlvdSByb290P1xuIgorbXNnc3RyICIiCisKKyMuIFAgc3RhdGUgY2hhbmdlcyB2aWEgTVNSIGFyZSBpZGVudGlmaWVkIHZpYSBjcHVpZCA4MDAwMDAwNworIy4gb24gSW50ZWwgYW5kIEFNRCwgYnV0IHdlIGFzc3VtZSBib29zdCBjYXBhYmxlIG1hY2hpbmVzIGNhbiBkbyB0aGF0CisjLiBpZiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID49IDB4ODAwMDAwMDcKKyMuICYmIChjcHVpZF9lZHgoMHg4MDAwMDAwNykgJiAoMSA8PCA3KSkpCisjLgorIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYm9vc3Qgc3RhdGUgc3VwcG9ydDogXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBTdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgInllcyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMgdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0Cittc2dpZCAibm8iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgICAgQWN0aXZlOiAlc1xuIgorbXNnc3RyICIgIG92bGFkYcSNOiAlc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIEJvb3N0IFN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFRvdGFsIFN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFBzdGF0ZS1QYiVkOiAlbHVNSHogKGJvb3N0IHN0YXRlKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgUHN0YXRlLVAlZDogICVsdU1IelxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIgIG5vIG9yIHVua25vd24gY3B1ZnJlcSBkcml2ZXIgaXMgYWN0aXZlIG9uIHRoaXMgQ1BVXG4iCittc2dzdHIgIiAgcHJvIHRlbnRvIENQVSBuZW7DrSBha3Rpdm7DrSDFvsOhZG7DvSB6bsOhbcO9IG92bGFkYcSNIGNwdWZyZXFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIG92bGFkYcSNOiAlc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgQ1BVcyB3aGljaCBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgZnJlcXVlbmN5OiAiCittc2dzdHIgIiAgQ1BVLCBrdGVyw6kgbXVzw60gbcSbbml0IGZyZWt2ZW5jaSB6w6Fyb3ZlxYg6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjMwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeSBjb29yZGluYXRlZCBieSBzb2Z0d2FyZTogIgorbXNnc3RyICIgIENQVSwga3RlcsOpIG11c8OtIG3Em25pdCBmcmVrdmVuY2kgesOhcm92ZcWIOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIG1heGltdW0gdHJhbnNpdGlvbiBsYXRlbmN5OiAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgaGFyZHdhcmUgbGltaXRzOiAiCittc2dzdHIgIiAgaGFyZHdhcm92w6kgbWV6ZTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBhdmFpbGFibGUgZnJlcXVlbmN5IHN0ZXBzOiAiCittc2dzdHIgIiAgZG9zdHVwbsOpIGZyZWt2ZW5jZTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnM6ICIKK21zZ3N0ciAiICBkb3N0dXBuw6kgcmVndWzDoXRvcnk6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3VycmVudCBwb2xpY3k6IGZyZXF1ZW5jeSBzaG91bGQgYmUgd2l0aGluICIKK21zZ3N0ciAiICBzb3XEjWFzbsOhIHRha3Rpa2E6IGZyZWt2ZW5jZSBieSBtxJtsYSBiw710IG1lemkgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGFuZCAiCittc2dzdHIgIiBhICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZ292ZXJub3IgXCIlc1wiIG1heSBkZWNpZGUgd2hpY2ggc3BlZWQgdG8gdXNlXG4iCisiICAgICAgICAgICAgICAgICAgd2l0aGluIHRoaXMgcmFuZ2UuXG4iCittc2dzdHIgIiIKKyIgIFJlZ3Vsw6F0b3IgXCIlc1wiIG3Fr8W+ZSByb3pob2Rub3V0IGpha291IGZyZWt2ZW5jaSBwb3XFvsOtdFxuIgorIiAgICAgICAgICAgICAgICAgICAgdiB0xJtjaHRvIG1lesOtY2guXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICIgIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSBpcyAiCittc2dzdHIgIiAgc291xI1hc27DoSBmcmVrdmVuY2UgQ1BVIGplICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoYXNzZXJ0ZWQgYnkgY2FsbCB0byBoYXJkd2FyZSkiCittc2dzdHIgIiAgKHpqacWhdMSbbm8gaGFyZHdhcm92w71tIHZvbMOhbsOtbSkiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIGNwdWZyZXEgc3RhdHM6ICIKK21zZ3N0ciAiICBzdGF0aXN0aWthIGNwdWZyZXE6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDcyCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgZnJlcWluZm8gW29wdGlvbnNdXG4iCittc2dzdHIgIlXFvml0w606IGNwdWZyZXEtaW5mbyBbcMWZZXDDrW5hxI1lXVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzMgdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNiB1dGlscy9jcHVwb3dlci1zZXQuYzoyMworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb25zOlxuIgorbXNnc3RyICJQxZllcMOtbmHEjWU6XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBQcmludHMgb3V0IGRlYnVnIGluZm9ybWF0aW9uIFtkZWZhdWx0XVxuIgorbXNnc3RyICIgIC1lLCAtLWRlYnVnICAgICAgICAgIFZ5cMOtxaFlIGxhZGljw60gaW5mb3JtYWNlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGFjY29yZGluZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGNwdWZyZXEgY29yZSAqXG4iCittc2dzdHIgIiIKKyIgIC1mLCAtLWZyZXEgICAgICAgICAgIFpqaXN0w60gYWt0dcOhbG7DrSBmcmVrdmVuY2ksIG5hIGt0ZXLDqSBDUFUgYsSbxb7DrVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgcG9kbGUgY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdywgLS1od2ZyZXEgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGJ5IHJlYWRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGl0IGZyb20gaGFyZHdhcmUgKG9ubHkgYXZhaWxhYmxlIHRvIHJvb3QpICpcbiIKK21zZ3N0ciAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgWmppc3TDrSBha3R1w6FsbsOtIGZyZWt2ZW5jaSwgbmEga3RlcsOpIENQVSBixJvFvsOtXG4iCisiICAgICAgICAgICAgICAgICAgICAgICB6IGhhcmR3YXJlIChkb3N0dXBuw6kgamVuIHXFvml2YXRlbGkgcm9vdCkgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgRGV0ZXJtaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIgorImFsbG93ZWQgKlxuIgorbXNnc3RyICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBaamlzdMOtIG1pbmltw6FsbsOtIGEgbWF4aW3DoWxuw60gZG9zdHVwbm91IGZyZWt2ZW5jaSBDUFUgIgorIipcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWQsIC0tZHJpdmVyICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgdXNlZCBjcHVmcmVxIGtlcm5lbCBkcml2ZXIgKlxuIgorbXNnc3RyICIgIC1kLCAtLWRyaXZlciAgICAgICAgIFpqaXN0w60gYWt0aXZuw60gb3ZsYWRhxI0gY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1wLCAtLXBvbGljeSAgICAgICAgIEdldHMgdGhlIGN1cnJlbnRseSB1c2VkIGNwdWZyZXEgcG9saWN5ICpcbiIKK21zZ3N0ciAiICAtcCwgLS1wb2xpY3kgICAgICAgICBaamlzdMOtIGFrdHXDoWxuw60gdGFrdGlrdSBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWcsIC0tZ292ZXJub3JzICAgICAgRGV0ZXJtaW5lcyBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnMgKlxuIgorbXNnc3RyICIgIC1nLCAtLWdvdmVybm9ycyAgICAgIFpqaXN0w60gZG9zdHVwbsOpIHJlZ3Vsw6F0b3J5IGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1yLCAtLXJlbGF0ZWQtY3B1cyAgIERldGVybWluZXMgd2hpY2ggQ1BVcyBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgIgorImZyZXF1ZW5jeSAqXG4iCittc2dzdHIgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIFpqaXN0w60sIGt0ZXLDqSBDUFUgbXVzw60gbcSbbml0IGZyZWt2ZW5jaSB6w6Fyb3ZlxYggKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIERldGVybWluZXMgd2hpY2ggQ1BVcyBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5XG4iCisiICAgICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlZCBieSBzb2Z0d2FyZSAqXG4iCittc2dzdHIgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIFpqaXN0w60sIGt0ZXLDqSBDUFUgbXVzw60gbcSbbml0IGZyZWt2ZW5jaSB6w6Fyb3ZlxYggKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtcywgLS1zdGF0cyAgICAgICAgICBTaG93cyBjcHVmcmVxIHN0YXRpc3RpY3MgaWYgYXZhaWxhYmxlXG4iCittc2dzdHIgIiAgLXMsIC0tc3RhdHMgICAgICAgICAgWm9icmF6w60gc3RhdGlzdGlrdSBjcHVmcmVxLCBqZS1saSBkb3N0dXBuw6FcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAteSwgLS1sYXRlbmN5ICAgICAgICBEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGxhdGVuY3kgb24gQ1BVIGZyZXF1ZW5jeSAiCisiY2hhbmdlcyAqXG4iCittc2dzdHIgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIFpqaXN0w60gbWluaW3DoWxuw60gYSBtYXhpbcOhbG7DrSBkb3N0dXBub3UgZnJla3ZlbmNpIENQVSAiCisiKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtYiwgLS1ib29zdCAgICAgICAgICBDaGVja3MgZm9yIHR1cmJvIG9yIGJvb3N0IG1vZGVzICAqXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvIgorImNwdWZyZXFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiAyLjQuIGFuZCBlYXJseSAyLjYuIGtlcm5lbHNcbiIKK21zZ3N0ciAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgVnlww63FoWUgaW5mb3JtYWNlIHZlIGZvcm3DoXR1LCBqYWvDvSBwb3XFvsOtdmFsbyByb3pocmFuw61cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIC9wcm9jL2NwdWZyZXEgdiBrZXJuZWxlY2ggxZlhZHkgMi40IGEgxI1hc27DqSAyLjZcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkxCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbSwgLS1odW1hbiAgICAgICAgICBodW1hbi1yZWFkYWJsZSBvdXRwdXQgZm9yIHRoZSAtZiwgLXcsIC1zIGFuZCAteSAiCisicGFyYW1ldGVyc1xuIgorbXNnc3RyICIiCisiICAtbSwgLS1odW1hbiAgICAgICAgICBWw71zdHVwIHBhcmFtZXRyxa8gLWYsIC13IGEgLXMgdiDigJ5saWRtaSDEjWl0ZWxuw6lt4oCcICIKKyJmb3Jtw6F0dVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWgsIC0taGVscCAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIgorbXNnc3RyICIgIC1oLCAtLWhlbHAgICAgICAgICAgIFZ5cMOtxaFlIHR1dG8gbsOhcG92xJtkdVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIG5vIGFyZ3VtZW50IG9yIG9ubHkgdGhlIC1jLCAtLWNwdSBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGRlYnVnIG91dHB1dCBhYm91dFxuIgorImNwdWZyZXEgaXMgcHJpbnRlZCB3aGljaCBpcyB1c2VmdWwgZS5nLiBmb3IgcmVwb3J0aW5nIGJ1Z3MuXG4iCittc2dzdHIgIiIKKyJOZW7DrS1saSB6YWTDoW4gxb7DoWRuw70gcGFyYW1ldHIgbmVibyBqZS1saSB6YWTDoW4gcG91emUgcMWZZXDDrW5hxI0gLWMsIC0tY3B1LCAiCisianNvdVxuIgorInZ5cHPDoW55IGxhZGljw60gaW5mb3JtYWNlLCBjb8W+IG3Fr8W+ZSBiw710IHXFvml0ZcSNbsOpIG5hcMWZw61rbGFkIHDFmWkgaGzDocWhZW7DrSBjaHliLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvciB0aGUgYXJndW1lbnRzIG1hcmtlZCB3aXRoICosIG9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpc1xuIgorImVxdWl2YWxlbnQgdG8gc2V0dGluZyBpdCB0byB6ZXJvXG4iCittc2dzdHIgIiIKKyJOZW7DrS1saSBwxZlpIHBvdcW+aXTDrSBwxZllcMOtbmHEjcWvIG96bmHEjWVuw71jaCAqIHphZMOhbiBwYXJhbWV0ciAtYyBuZWJvIC0tY3B1LFxuIgorInDFmWVkcG9rbMOhZMOhIHNlIGplaG8gaG9kbm90YSAwLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyB0b29sIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcGFzc2luZyBhIC0tY3B1ICIKKyJhcmd1bWVudFxuIgorbXNnc3RyICJaYWRhbsO9IHBhcmFtZXRyIG5lbcWvxb5lIGLDvXQgcG91xb5pdCB6w6Fyb3ZlxYggcyBwxZllcMOtbmHEjWVtIC1jIG5lYm8gLS1jcHVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIC0tY3B1IHBhcmFtZXRlciBhbmQvb3JcbiIKKyJtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIgorbXNnc3RyICIiCisiTmVsemUgemFkYXQgdsOtY2UgbmXFviBqZWRlbiBwYXJhbWV0ciAtYyBuZWJvIC0tY3B1XG4iCisiYW5lYm8gdsOtY2UgbmXFviBqZWRlbiBwYXJhbWV0ciB1csSNdWrDrWPDrSB2w71zdHVwXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYwMCB1dGlscy9jcHVmcmVxLXNldC5jOjgyIHV0aWxzL2NwdXBvd2VyLXNldC5jOjQyCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6NDIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIgorbXNnc3RyICJuZXBsYXRuw70gbmVibyBuZXpuw6Ftw70gcGFyYW1ldHJcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGFuYWx5emUgQ1BVICVkIGFzIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBwcmVzZW50XG4iCittc2dzdHIgIm5lbHplIGFuYWx5em92YXQgQ1BVICVkLCB2eXBhZMOhIHRvLCDFvmUgbmVuw60gcMWZw610b21lblxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MjAgdXRpbHMvY3B1cG93ZXItaW5mby5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJhbmFseXppbmcgQ1BVICVkOlxuIgorbXNnc3RyICJhbmFseXp1amkgQ1BVICVkOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgZnJlcXVlbmN5LXNldCBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVcW+aXTDrTogY3B1ZnJlcS1zZXQgW3DFmWVww61uYcSNZV1cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbmV3IG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgIE5vdsOhIG5lam5pxb7FocOtIGZyZWt2ZW5jZSwga3Rlcm91IG3Fr8W+ZSByZWd1bMOhdG9yICIKKyJ2eWJyYXRcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgbmV3IG1heGltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLXUgRlJFUSwgLS1tYXggRlJFUSAgICAgIE5vdsOhIG5lanZ5xaHFocOtIGZyZWt2ZW5jZSwga3Rlcm91IG3Fr8W+ZSByZWd1bMOhdG9yICIKKyJ6dm9saXRcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1nIEdPViwgLS1nb3Zlcm5vciBHT1YgICBuZXcgY3B1ZnJlcSBnb3Zlcm5vclxuIgorbXNnc3RyICIgIC1nIEdPViwgLS1nb3Zlcm5vcnMgR09WICBOb3bDvSByZWd1bMOhdG9yIGNwdWZyZXFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiBGUkVRLCAtLWZyZXEgRlJFUSAgICAgc3BlY2lmaWMgZnJlcXVlbmN5IHRvIGJlIHNldC4gUmVxdWlyZXMgdXNlcnNwYWNlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgZ292ZXJub3IgdG8gYmUgYXZhaWxhYmxlIGFuZCBsb2FkZWRcbiIKK21zZ3N0ciAiIgorIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIEZyZWt2ZW5jZSwga3RlcsOhIG3DoSBiw710IG5hc3RhdmVuYS4gVnnFvmFkdWplLCBhYnkgIgorImJ5bFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgasOhZMWZZSBuYWhyw6FuIHJlZ3Vsw6F0b3Ig4oCadXNlcnNwYWNl4oCYLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXIsIC0tcmVsYXRlZCAgICAgICAgICAgIFN3aXRjaGVzIGFsbCBoYXJkd2FyZS1yZWxhdGVkIENQVXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMzIHV0aWxzL2NwdXBvd2VyLXNldC5jOjI4IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIgorbXNnc3RyICIgIC1oLCAtLWhlbHAgICAgICAgICAgIFZ5cMOtxaFlIHR1dG8gbsOhcG92xJtkdVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZXM6XG4iCisiMS4gT21pdHRpbmcgdGhlIC1jIG9yIC0tY3B1IGFyZ3VtZW50IGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyBpdCB0byBcImFsbFwiXG4iCittc2dzdHIgIiIKKyJOZW7DrS1saSBwxZlpIHBvdcW+aXTDrSBwxZllcMOtbmHEjcWvIG96bmHEjWVuw71jaCAqIHphZMOhbiBwYXJhbWV0ciAtYyBuZWJvIC0tY3B1LFxuIgorInDFmWVkcG9rbMOhZMOhIHNlIGplaG8gaG9kbm90YSAwLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiMi4gVGhlIC1mIEZSRVEsIC0tZnJlcSBGUkVRIHBhcmFtZXRlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgIgorInBhcmFtZXRlclxuIgorIiAgIGV4Y2VwdCB0aGUgLWMgQ1BVLCAtLWNwdSBDUFUgcGFyYW1ldGVyXG4iCisiMy4gRlJFUXVlbmNpZXMgY2FuIGJlIHBhc3NlZCBpbiBIeiwga0h6IChkZWZhdWx0KSwgTUh6LCBHSHosIG9yIFRIelxuIgorIiAgIGJ5IHBvc3RmaXhpbmcgdGhlIHZhbHVlIHdpdGggdGhlIHdhbnRlZCB1bml0IG5hbWUsIHdpdGhvdXQgYW55IHNwYWNlXG4iCisiICAgKEZSRVF1ZW5jeSBpbiBrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLlxuIgorbXNnc3RyICIiCisiUG96bsOhbWt5OlxuIgorIjEuIFZ5bmVjaMOhbsOtIHBhcmFtZXRydSAtYyBuZWJvIC0tY3B1IGplIGVrdml2YWxlbnRuw60gamVobyBuYXN0YXZlbsOtIG5hIDBcbiIKKyIyLiBQxZllcMOtbmHEjSAtZiBuZWJvIC0tZnJlcSBuZW3Fr8W+ZSBiw710IHBvdcW+aXQgesOhcm92ZcWIIHMgxb7DoWRuw71tIGppbsO9bSB2eWptYSAtIgorImNcbiIKKyIgICBuZWJvIC0tY3B1XG4iCisiMy4gRnJla3ZlbmNlIChGUkVRKSBtb2hvdSBiw710IHphZMOhbnkgdiBIeiwga0h6ICh2w71jaG96w60pLCBNSHosIEdIeiBuZWJvIFRIelxuIgorIiAgIHDFmWlwb2plbsOtbSBuw6F6dnUgamVkbm90a3kgYmV6IG1lemVyeSBtZXppIMSNw61zbGVtIGEgamVkbm90a291XG4iCisiICAgKEZSRVEgdiBrSHogPV4gSHogKiAwLDAwMSA9IF4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBzZXR0aW5nIG5ldyB2YWx1ZXMuIENvbW1vbiBlcnJvcnM6XG4iCisiLSBEbyB5b3UgaGF2ZSBwcm9wZXIgYWRtaW5pc3RyYXRpb24gcmlnaHRzPyAoc3VwZXItdXNlcj8pXG4iCisiLSBJcyB0aGUgZ292ZXJub3IgeW91IHJlcXVlc3RlZCBhdmFpbGFibGUgYW5kIG1vZHByb2JlZD9cbiIKKyItIFRyeWluZyB0byBzZXQgYW4gaW52YWxpZCBwb2xpY3k/XG4iCisiLSBUcnlpbmcgdG8gc2V0IGEgc3BlY2lmaWMgZnJlcXVlbmN5LCBidXQgdXNlcnNwYWNlIGdvdmVybm9yIGlzIG5vdCAiCisiYXZhaWxhYmxlLFxuIgorIiAgIGZvciBleGFtcGxlIGJlY2F1c2Ugb2YgaGFyZHdhcmUgd2hpY2ggY2Fubm90IGJlIHNldCB0byBhIHNwZWNpZmljICIKKyJmcmVxdWVuY3lcbiIKKyIgICBvciBiZWNhdXNlIHRoZSB1c2Vyc3BhY2UgZ292ZXJub3IgaXNuJ3QgbG9hZGVkP1xuIgorbXNnc3RyICIiCisiQ2h5YmEgcMWZaSBuYXN0YXZvdsOhbsOtIG5vdsO9Y2ggaG9kbm90LiBPYnZ5a2zDqSBwcm9ibMOpbXk6XG4iCisiLSBNw6F0ZSBwYXTFmWnEjW7DoSBhZG1pbmlzdHLDoXRvcnNrw6EgcHLDoXZhPyAocm9vdD8pXG4iCisiLSBKZSBwb8W+YWRvdmFuw70gcmVndWzDoXRvciBkb3N0dXBuw70gdiBqw6FkxZllPyAobW9kcHJvYmU/KVxuIgorIi0gU25hxb7DrXRlIHNlIG5hc3Rhdml0IG5lcGxhdG5vdSB0YWt0aWt1P1xuIgorIi0gU25hxb7DrXRlIHNlIG5hc3Rhdml0IHVyxI1pdG91IGZyZWt2ZW5jaSwgYWxlIG5lbsOtIGRvc3R1cG7DvVxuIgorIiAgcmVndWzDoXRvciDigJp1c2Vyc3BhY2XigJgsIG5hcMWZw61rbGFkIHByb3Rvxb5lIG5lbsOtIG5haHLDoW4gdiBqw6FkxZllLFxuIgorIiAgbmVibyBuZWx6ZSBuYSB0b210byBoYXJkd2FyZSBuYXN0YXZpdCB1csSNaXRvdSBmcmVrdmVuY2k/XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nLCB1bmtub3duIG9yIHVuaGFuZGxlZCBDUFU/XG4iCittc2dzdHIgIm5lem7DoW3DvSBuZWJvIG5lcG9kcG9yb3ZhbsO9IENQVT9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSAtZi8tLWZyZXEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1kLy0tbWluLCAtdS8tLW1heCBvclxuIgorIi1nLy0tZ292ZXJub3IgcGFyYW1ldGVyc1xuIgorbXNnc3RyICIiCisicMWZZXDDrW5hxI0gLWYvLS1mcmVxIG5lbcWvxb5lIGLDvXQgcG91xb5pdCB6w6Fyb3ZlxYhcbiIKKyJzIHDFmWVww61uYcSNZW0gLWQvLS1taW4sIC11Ly0tbWF4IG5lYm8gLWcvLS1nb3Zlcm5vclxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXQgbGVhc3Qgb25lIHBhcmFtZXRlciBvdXQgb2YgLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXgsIGFuZFxuIgorIi1nLy0tZ292ZXJub3IgbXVzdCBiZSBwYXNzZWRcbiIKK21zZ3N0ciAiIgorIk11c8OtIGLDvXQgemFkw6FuIGFsZXNwb8WIIGplZGVuIHDFmWVww61uYcSNXG4iCisiLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXggbmVibyAtZy8tLWdvdmVybm9yXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3B1OiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBzZXQgWyAtYiB2YWwgXSBbIC1tIHZhbCBdIFsgLXMgdmFsIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYiwgLS1wZXJmLWJpYXMgW1ZBTF0gICAgU2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0tc2NoZWQtbWMgIFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtcywgLS1zY2hlZC1zbXQgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyICIKKyJwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1wZXJmLWJpYXMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtbWMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICItLXNjaGVkLXNtdCBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgc2NoZWQtbWMgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1zbXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBwZXJmLWJpYXMgdmFsdWUgb24gQ1BVICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBpbmZvIFsgLWIgXSBbIC1tIF0gWyAtcyBdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyAgICBHZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLW0sIC0tc2NoZWQtbWMgICAgIEdldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiICAtcCwgLS1wb2xpY3kgICAgICAgICBaamlzdMOtIGFrdHXDoWxuw60gdGFrdGlrdSBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1zLCAtLXNjaGVkLXNtdCAgICBHZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGFzc2luZyBubyBvcHRpb24gd2lsbCBzaG93IGFsbCBpbmZvLCBieSBkZWZhdWx0IG9ubHkgb24gY29yZSAwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0ncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIy4gaWYgc3lzZnMgZmlsZSBpcyBtaXNzaW5nIGl0J3M6IGVycm5vID09IEVOT0VOVAorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwNSB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlbCdzIHBlcmZvcm1hbmNlIGJpYXMgc2V0dGluZyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IEludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBwZXJmLWJpYXMgdmFsdWVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBlcmYtYmlhczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbHl6dWppIENQVSAlZDpcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBObyBpZGxlIHN0YXRlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogQ2FuJ3QgcmVhZCBpZGxlIHN0YXRlIGluZm9cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIG1heCBpZGxlIHN0YXRlICV1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTnVtYmVyIG9mIGlkbGUgc3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQ4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgaWRsZSBzdGF0ZXM6IgorbXNnc3RyICIgIGRvc3R1cG7DqSBmcmVrdmVuY2U6ICIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3MvRGVzY3JpcHRpb246ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGF0ZW5jeTogJWx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkR1cmF0aW9uOiAlbGx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGRyaXZlclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDUFVpZGxlIGRyaXZlcjogJXNcbiIKK21zZ3N0ciAiICBvdmxhZGHEjTogJXNcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVWlkbGUgZ292ZXJub3I6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogQ2FuJ3QgcmVhZCBDLXN0YXRlIGluZm9cbiIKK21zZ3N0ciAiIgorCisjLiBwcmludGYoIkNzdGF0ZXM6ICVkXG4iLCBjc3RhdGVzKTsKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJhY3RpdmUgc3RhdGU6ICAgICAgICAgICAgQzBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF4X2NzdGF0ZTogICAgICAgICAgICAgIEMldVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYXhpbXVtIGFsbG93ZWQgbGF0ZW5jeTogJWx1IHVzZWNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhdGVzOlx0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDJWQ6ICAgICAgICAgICAgICAgICAgdHlwZVtDJWRdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvbW90aW9uWy0tXSBkZW1vdGlvblstLV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJsYXRlbmN5WyUwM2x1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlWyUwOGx1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmF0aW9uWyUwMjBMdV0gXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgaWRsZWluZm8gW29wdGlvbnNdXG4iCittc2dzdHIgIlXFvml0w606IGNwdWZyZXEtaW5mbyBbcMWZZXDDrW5hxI1lXVxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc2lsZW50ICAgICAgICAgT25seSBzaG93IGdlbmVyYWwgQy1zdGF0ZSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICIgIC1lLCAtLWRlYnVnICAgICAgICAgIFZ5cMOtxaFlIGxhZGljw60gaW5mb3JtYWNlXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy8iCisiYWNwaS9wcm9jZXNzb3IvKi9wb3dlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIG9sZGVyIGtlcm5lbHNcbiIKK21zZ3N0ciAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgVnlww63FoWUgaW5mb3JtYWNlIHZlIGZvcm3DoXR1LCBqYWvDvSBwb3XFvsOtdmFsbyByb3pocmFuw61cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIC9wcm9jL2NwdWZyZXEgdiBrZXJuZWxlY2ggxZlhZHkgMi40IGEgxI1hc27DqSAyLjZcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIgorbXNnc3RyICIiCisiTmVsemUgemFkYXQgdsOtY2UgbmXFviBqZWRlbiBwYXJhbWV0ciAtYyBuZWJvIC0tY3B1XG4iCisiYW5lYm8gdsOtY2UgbmXFviBqZWRlbiBwYXJhbWV0ciB1csSNdWrDrWPDrSB2w71zdHVwXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICBDUFUgbnVtYmVyIHdoaWNoIGluZm9ybWF0aW9uIHNoYWxsIGJlIGRldGVybWluZWQgIgorI34gImFib3V0XG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgIMSMw61zbG8gQ1BVLCBvIGt0ZXLDqW0gc2UgbWFqw60gemppc3RpdCBpbmZvcm1hY2VcbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBudW1iZXIgb2YgQ1BVIHdoZXJlIGNwdWZyZXEgc2V0dGluZ3Mgc2hhbGwgYmUgIgorI34gIm1vZGlmaWVkXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICDEjMOtc2xvIENQVSBwcm8ga3RlcsO9IHNlIG3DoSBwcm92w6lzdCBuYXN0YXZlbsOtICIKKyN+ICJjcHVmcmVxXG4iCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9wby9kZS5wbyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2RlLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YzA5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9wby9kZS5wbwpAQCAtMCwwICsxLDk2MSBAQAorIyBHZXJtYW4gdHJhbnNsYXRpb25zIGZvciBjcHVmcmVxdXRpbHMgcGFja2FnZQorIyBHZXJtYW4gbWVzc2FnZXMgZm9yIGNwdWZyZXF1dGlscy4KKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kubmV0PgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgY3B1ZnJlcXV0aWxzIHBhY2thZ2UuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBjcHVmcmVxdXRpbHMgMDA2XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTAzLTA4IDE3OjAzKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA5LTA4LTA4IDE3OjE4KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6ICA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5uZXQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTk9ORVxuIgorIkxhbmd1YWdlOiBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzozNgorbXNnaWQgIlByb2Nlc3NvciBDb3JlIEMzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjQzCittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTEKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo1OCB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzAKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzozMworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM3IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzIiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6NDcKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NTYKK21zZ2lkICJQYWNrYWdlIGluIHNsZWVwIHN0YXRlIChQQzEgb3IgZGVlcGVyKSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NjMKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzcKK21zZ2lkICJOb3J0aCBCcmlkZ2UgUDEgYm9vbGVhbiBjb3VudGVyIChyZXR1cm5zIDAgb3IgMSkiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzozNQorbXNnaWQgIlByb2Nlc3NvciBDb3JlIG5vdCBpZGxlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NDIKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBpbiBhbiBpZGxlIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NTAKK21zZ2lkICJBdmVyYWdlIEZyZXF1ZW5jeSAoaW5jbHVkaW5nIGJvb3N0KSBpbiBNSHoiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy1oXSBbIFstdF0gfCBbLWxdIHwgWy1tIDxtb24xPixbPG1vbjI+XSBdIF0gWy1pICIKKyJpbnRlcnZhbF9zZWMgfCAtYyBjb21tYW5kIC4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjcHVwb3dlciBtb25pdG9yOiBbLXZdIFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtdjogYmUgbW9yZSB2ZXJib3NlXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaDogcHJpbnQgdGhpcyBoZWxwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaTogdGltZSBpbnRlcnZhbGwgdG8gbWVhc3VyZSBmb3IgaW4gc2Vjb25kcyAoZGVmYXVsdCAxKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXQ6IHNob3cgQ1BVIHRvcG9sb2d5L2hpZXJhcmNoeVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWw6IGxpc3QgYXZhaWxhYmxlIENQVSBzbGVlcCBtb25pdG9ycyAoZm9yIHVzZSB3aXRoIC1tKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLW06IHNob3cgc3BlY2lmaWMgQ1BVIHNsZWVwIG1vbml0b3JzIG9ubHkgKGluIHNhbWUgb3JkZXIpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib25seSBvbmUgb2Y6IC10LCAtbCwgLW0gYXJlIGFsbG93ZWRcbiIKKyJJZiBub25lIG9mIHRoZW0gaXMgcGFzc2VkLCIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbGwgc3VwcG9ydGVkIG1vbml0b3JzIGFyZSBzaG93blxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgJXMsIENvdW50ZXIgJXMgaGFzIG5vIGNvdW50IGZ1bmN0aW9uLiBJbXBsZW1lbnRhdGlvbiBlcnJvclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqaXMgb2ZmbGluZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtYXggbW9uaXRvciBuYW1lIGxlbmd0aCAoJWQpIGV4Y2VlZGVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWF0Y2hpbmcgbW9uaXRvciBmb3VuZCBpbiAlcywgdHJ5IC1sIG9wdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgXCIlc1wiICglZCBzdGF0ZXMpIC0gTWlnaHQgb3ZlcmZsb3cgYWZ0ZXIgJXUgc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRvb2sgJS41ZiBzZWNvbmRzIGFuZCBleGl0ZWQgd2l0aCBzdGF0dXMgJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVhZCBudW1iZXIgb2YgYXZhaWxhYmxlIHByb2Nlc3NvcnNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgbW9uaXRvciAlcyBuZWVkcyByb290IGFjY2Vzc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIEhXIENzdGF0ZSBtb25pdG9ycyBmb3VuZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3B1cG93ZXIgWyAtYyBjcHVsaXN0IF0gc3ViY29tbWFuZCBbQVJHU11cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIC0tdmVyc2lvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydGVkIHN1YmNvbW1hbmRzIGFyZTpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTb21lIHN1YmNvbW1hbmRzIGNhbiBtYWtlIHVzZSBvZiB0aGUgLWMgY3B1bGlzdCBvcHRpb24uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29rIGF0IHRoZSBnZW5lcmFsIGNwdXBvd2VyIG1hbnBhZ2UgaG93IHRvIHVzZSBpdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5kIHJlYWQgdXAgdGhlIHN1YmNvbW1hbmQncyBtYW5wYWdlIHdoZXRoZXIgaXQgaXMgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlVzZSBjcHVwb3dlciBoZWxwIHN1YmNvbW1hbmQgZm9yIGdldHRpbmcgaGVscCBmb3IgYWJvdmUgc3ViY29tbWFuZHMuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgZXJyb3JzIGFuZCBidWdzIHRvICVzLCBwbGVhc2UuXG4iCittc2dzdHIgIkJpdHRlIG1lbGRlbiBTaWUgRmVobGVyIGFuICVzLlxuIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBwYXJzaW5nIGNwdSBsaXN0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3ViY29tbWFuZCAlcyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzozMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjb3VudCB0aGUgbnVtYmVyIG9mIENQVXMgKCVzOiAlcyksIGFzc3VtaW5nIDFcbiIKK21zZ3N0ciAiIgorIktvbm50ZSBuaWNodCBkaWUgQW56YWhsIGRlciBDUFVzIGhlcmF1c2ZpbmRlbiAoJXMgOiAlcyksIG5laG1lIGRhaGVyIDEgYW4uXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgICAgICAgICAgbWluaW11bSBDUFUgZnJlcXVlbmN5ICAtICBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIC0gIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKyIgICAgICAgICAgbWluaW1hbGUgQ1BVLVRha3RmcmVxLiAtICBtYXhpbWFsZSBDUFUtVGFrdGZyZXEuIC0gIFJlZ2xlciAgXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBldmFsdWF0aW5nIEJvb3N0IENhcGFiaWxpdGllcyBvbiBDUFUgJWQgLS0gYXJlIHlvdSByb290P1xuIgorbXNnc3RyICIiCisKKyMuIFAgc3RhdGUgY2hhbmdlcyB2aWEgTVNSIGFyZSBpZGVudGlmaWVkIHZpYSBjcHVpZCA4MDAwMDAwNworIy4gb24gSW50ZWwgYW5kIEFNRCwgYnV0IHdlIGFzc3VtZSBib29zdCBjYXBhYmxlIG1hY2hpbmVzIGNhbiBkbyB0aGF0CisjLiBpZiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID49IDB4ODAwMDAwMDcKKyMuICYmIChjcHVpZF9lZHgoMHg4MDAwMDAwNykgJiAoMSA8PCA3KSkpCisjLgorIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYm9vc3Qgc3RhdGUgc3VwcG9ydDogXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBTdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgInllcyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMgdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0Cittc2dpZCAibm8iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgICAgQWN0aXZlOiAlc1xuIgorbXNnc3RyICIgIFRyZWliZXI6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQm9vc3QgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgVG90YWwgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgUHN0YXRlLVBiJWQ6ICVsdU1IeiAoYm9vc3Qgc3RhdGUpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBQc3RhdGUtUCVkOiAgJWx1TUh6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgbm8gb3IgdW5rbm93biBjcHVmcmVxIGRyaXZlciBpcyBhY3RpdmUgb24gdGhpcyBDUFVcbiIKK21zZ3N0ciAiICBrZWluIG9kZXIgbmljaHQgYmVzdGltbWJhcmVyIGNwdWZyZXEtVHJlaWJlciBha3RpdlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBkcml2ZXI6ICVzXG4iCittc2dzdHIgIiAgVHJlaWJlcjogJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgQ1BVcyB3aGljaCBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgZnJlcXVlbmN5OiAiCittc2dzdHIgIiAgRm9sZ2VuZGUgQ1BVcyBsYXVmZW4gbWl0IGRlciBnbGVpY2hlbiBIYXJkd2FyZS1UYWt0ZnJlcXVlbno6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgQ1BVcyB3aGljaCBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5IGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlOiAiCittc2dzdHIgIiAgRGllIFRha3RmcmVxdWVueiBmb2xnZW5kZXIgQ1BVcyB3ZXJkZW4gcGVyIFNvZnR3YXJlIGtvb3JkaW5pZXJ0OiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIG1heGltdW0gdHJhbnNpdGlvbiBsYXRlbmN5OiAiCittc2dzdHIgIiAgTWF4aW1hbGUgRGF1ZXIgZWluZXMgVGFrdGZyZXF1ZW56d2VjaHNlbHM6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgaGFyZHdhcmUgbGltaXRzOiAiCittc2dzdHIgIiAgSGFyZHdhcmViZWRpbmd0ZSBHcmVuemVuIGRlciBUYWt0ZnJlcXVlbno6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYXZhaWxhYmxlIGZyZXF1ZW5jeSBzdGVwczogIgorbXNnc3RyICIgIG32Z2xpY2hlIFRha3RmcmVxdWVuemVuOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICIgIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9yczogIgorbXNnc3RyICIgIG32Z2xpY2hlIFJlZ2xlcjogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IHBvbGljeTogZnJlcXVlbmN5IHNob3VsZCBiZSB3aXRoaW4gIgorbXNnc3RyICIgIG1vbWVudGFuZSBUYWt0aWs6IGRpZSBGcmVxdWVueiBzb2xsIGlubmVyaGFsYiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgYW5kICIKK21zZ3N0ciAiIHVuZCAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGdvdmVybm9yIFwiJXNcIiBtYXkgZGVjaWRlIHdoaWNoIHNwZWVkIHRvIHVzZVxuIgorIiAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGlzIHJhbmdlLlxuIgorbXNnc3RyICIiCisiICBsaWVnZW4uIERlciBSZWdsZXIgXCIlc1wiIGthbm4gZnJlaSBlbnRzY2hlaWRlbixcbiIKKyIgICAgICAgICAgICAgICAgICAgIHdlbGNoZSBUYWt0ZnJlcXVlbnogaW5uZXJoYWxiIGRpZXNlciBHcmVuemUgdmVyd2VuZGV0ICIKKyJ3aXJkLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IENQVSBmcmVxdWVuY3kgaXMgIgorbXNnc3RyICIgIG1vbWVudGFuZSBUYWt0ZnJlcXVlbnogaXN0ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoYXNzZXJ0ZWQgYnkgY2FsbCB0byBoYXJkd2FyZSkiCittc2dzdHIgIiAgKHZlcmlmaXppZXJ0IGR1cmNoIE5hY2hmcmFnZSBiZWkgZGVyIEhhcmR3YXJlKSIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3B1ZnJlcSBzdGF0czogIgorbXNnc3RyICIgIFN0YXRpc3RpazoiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGZyZXFpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJBdWZydWY6IGNwdWZyZXEtaW5mbyBbT3B0aW9uZW5dXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MyB1dGlscy9jcHVmcmVxLXNldC5jOjI2IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIzCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbnM6XG4iCittc2dzdHIgIk9wdGlvbmVuOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLWUsIC0tZGVidWcgICAgICAgICAgUHJpbnRzIG91dCBkZWJ1ZyBpbmZvcm1hdGlvbiBbZGVmYXVsdF1cbiIKK21zZ3N0ciAiIgorIiAgLWUsIC0tZGVidWcgICAgICAgICAgRXJ6ZXVndCBkZXRhaWxsaWVydGUgSW5mb3JtYXRpb25lbiwgaGlsZnJlaWNoXG4iCisiICAgICAgICAgICAgICAgICAgICAgICB6dW0gQXVmc3D8cmVuIHZvbiBGZWhsZXJuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGFjY29yZGluZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGNwdWZyZXEgY29yZSAqXG4iCittc2dzdHIgIiIKKyIgIC1mLCAtLWZyZXEgICAgICAgICAgIEZpbmRldCBkaWUgbW9tZW50YW5lIENQVS1UYWt0ZnJxdWVueiBoZXJhdXMgKG5hY2hcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIE1laW51bmcgZGVzIEJldHJpZWJzc3lzdGVtcykgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBieSByZWFkaW5nXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpdCBmcm9tIGhhcmR3YXJlIChvbmx5IGF2YWlsYWJsZSB0byByb290KSAqXG4iCittc2dzdHIgIiIKKyIgIC13LCAtLWh3ZnJlcSAgICAgICAgIEZpbmRldCBkaWUgbW9tZW50YW5lIENQVS1UYWt0ZnJlcXVlbnogaGVyYXVzXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAodmVyaWZpemllcnQgZHVyY2ggTmFjaGZyYWdlIGJlaSBkZXIgSGFyZHdhcmUpXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBbbnVyIGRlciBBZG1pbmlzdHJhdG9yIGthbm4gZGllcyB0dW5dICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIERldGVybWluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICIKKyJhbGxvd2VkICpcbiIKK21zZ3N0ciAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgRmluZGV0IGRpZSBtaW5pbWFsZSB1bmQgbWF4aW1hbGUgVGFrdGZyZXF1ZW56IGhlcmF1cyAiCisiKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZCwgLS1kcml2ZXIgICAgICAgICBEZXRlcm1pbmVzIHRoZSB1c2VkIGNwdWZyZXEga2VybmVsIGRyaXZlciAqXG4iCittc2dzdHIgIiAgLWQsIC0tZHJpdmVyICAgICAgICAgRmluZGV0IGRlbiBtb21lbnRhbmVuIFRyZWliZXIgaGVyYXVzICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgR2V0cyB0aGUgY3VycmVudGx5IHVzZWQgY3B1ZnJlcSBwb2xpY3kgKlxuIgorbXNnc3RyICIgIC1wLCAtLXBvbGljeSAgICAgICAgIEZpbmRldCBkaWUgbW9tZW50YW5lIFRha3RpayBoZXJhdXMgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZywgLS1nb3Zlcm5vcnMgICAgICBEZXRlcm1pbmVzIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9ycyAqXG4iCittc2dzdHIgIiAgLWcsIC0tZ292ZXJub3JzICAgICAgRXJ6ZXVndCBlaW5lIExpc3RlIG1pdCB2ZXJm/GdiYXJlbiBSZWdsZXJuICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1yLCAtLXJlbGF0ZWQtY3B1cyAgIERldGVybWluZXMgd2hpY2ggQ1BVcyBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgIgorImZyZXF1ZW5jeSAqXG4iCittc2dzdHIgIiIKKyIgIC1yLCAtLXJlbGF0ZWQtY3B1cyAgIEZpbmRldCBoZXJhdXMsIHdlbGNoZSBDUFVzIG1pdCBkZXJzZWxiZW4gIgorInBoeXNpa2FsaXNjaGVuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBUYWt0ZnJlcXVlbnogbGF1ZmVuICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIERldGVybWluZXMgd2hpY2ggQ1BVcyBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5XG4iCisiICAgICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlZCBieSBzb2Z0d2FyZSAqXG4iCittc2dzdHIgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIEZpbmRldCBoZXJhdXMsIHZvbiB3ZWxjaGVuIENQVXMgZGllIFRha3RmcmVxdWVueiAiCisiZHVyY2hcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIGtvb3JkaW5pZXJ0IHdlcmRlbiBtdXNzICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc3RhdHMgICAgICAgICAgU2hvd3MgY3B1ZnJlcSBzdGF0aXN0aWNzIGlmIGF2YWlsYWJsZVxuIgorbXNnc3RyICIiCisiICAtcywgLS1zdGF0cyAgICAgICAgICBaZWlndCwgc29mZXJuIG32Z2xpY2gsIFN0YXRpc3Rpa2VuIPxiZXIgY3B1ZnJlcSBhbi5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC15LCAtLWxhdGVuY3kgICAgICAgIERldGVybWluZXMgdGhlIG1heGltdW0gbGF0ZW5jeSBvbiBDUFUgZnJlcXVlbmN5ICIKKyJjaGFuZ2VzICpcbiIKK21zZ3N0ciAiIgorIiAgLXksIC0tbGF0ZW5jeSAgICAgICAgRmluZGV0IGRpZSBtYXhpbWFsZSBEYXVlciBlaW5lcyBUYWt0ZnJlcXVlbnp3ZWNoc2VscyAiCisiaGVyYXVzICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWIsIC0tYm9vc3QgICAgICAgICAgQ2hlY2tzIGZvciB0dXJibyBvciBib29zdCBtb2RlcyAgKlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jLyIKKyJjcHVmcmVxXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gMi40LiBhbmQgZWFybHkgMi42LiBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIEVyemV1Z3QgSW5mb3JtYXRpb25lbiBpbiBlaW5lbSDkaG5saWNoZW0gRm9ybWF0IHp1ICIKKyJkZW1cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGRlciAvcHJvYy9jcHVmcmVxLURhdGVpIGluIDIuNC4gdW5kIGZy/GhlbiAyLjYuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBLZXJuZWwtVmVyc2lvbmVuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbSwgLS1odW1hbiAgICAgICAgICBodW1hbi1yZWFkYWJsZSBvdXRwdXQgZm9yIHRoZSAtZiwgLXcsIC1zIGFuZCAteSAiCisicGFyYW1ldGVyc1xuIgorbXNnc3RyICIiCisiICAtbSwgLS1odW1hbiAgICAgICAgICBGb3JtYXRpZXJ0IFRha3RmcmVxdWVuei0gdW5kIFplaXRkYXVlcmFuZ2FiZW4gaW4gIgorImJlc3NlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgbGVzYmFyZXIgRm9ybSAoTUh6LCBHSHo7IHVzLCBtcylcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiICAtaCwgLS1oZWxwICAgICAgICAgICBHaWJ0IGRpZXNlIEt1cnr8YmVyc2ljaHQgYXVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgbm8gYXJndW1lbnQgb3Igb25seSB0aGUgLWMsIC0tY3B1IHBhcmFtZXRlciBpcyBnaXZlbiwgZGVidWcgb3V0cHV0IGFib3V0XG4iCisiY3B1ZnJlcSBpcyBwcmludGVkIHdoaWNoIGlzIHVzZWZ1bCBlLmcuIGZvciByZXBvcnRpbmcgYnVncy5cbiIKK21zZ3N0ciAiIgorIlNvZmVybiBrZWluIGFuZGVyZXIgUGFyYW1ldGVyIGFscyAnLWMsIC0tY3B1JyBhbmdlZ2ViZW4gd2lyZCwgbGllZmVydCAiCisiZGllc2VzXG4iCisiUHJvZ3JhbW0gSW5mb3JtYXRpb25lbiwgZGllIHouQi4genVtIEJlcmljaHRlbiB2b24gRmVobGVybiBu/HR6bGljaCBzaW5kLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvciB0aGUgYXJndW1lbnRzIG1hcmtlZCB3aXRoICosIG9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpc1xuIgorImVxdWl2YWxlbnQgdG8gc2V0dGluZyBpdCB0byB6ZXJvXG4iCittc2dzdHIgIiIKKyJCZWkgZGVuIG1pdCAqIG1hcmtpZXJ0ZW4gUGFyYW1ldGVybiB3aXJkICctLWNwdSAwJyBhbmdlbm9tbWVuLCBzb3dlaXQgbmljaHRcbiIKKyJtaXR0ZWxzIC1jIG9kZXIgLS1jcHUgZXR3YXMgYW5kZXJlcyBhbmdlZ2ViZW4gd2lyZFxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyB0b29sIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcGFzc2luZyBhIC0tY3B1ICIKKyJhcmd1bWVudFxuIgorbXNnc3RyICJEaWVzZSBPcHRpb24ga2FubiBuaWNodCBtaXQgZGVyIC0tY3B1LU9wdGlvbiBrb21iaW5pZXJ0IHdlcmRlblxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgLS1jcHUgcGFyYW1ldGVyIGFuZC9vclxuIgorIm1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJNYW4ga2FubiBuaWNodCBtZWhyIGFscyBlaW5lbiAtLWNwdS1QYXJhbWV0ZXIgdW5kL29kZXIgbWVociBhbHMgZWluZW5cbiIKKyJpbmZvcm1hdGlvbnNzcGV6aWZpc2NoZW4gUGFyYW1ldGVyIGdsZWljaHplaXRpZyBhbmdlYmVuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYwMCB1dGlscy9jcHVmcmVxLXNldC5jOjgyIHV0aWxzL2NwdXBvd2VyLXNldC5jOjQyCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6NDIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIgorbXNnc3RyICJ1bmJla2FubnRlciBvZGVyIGZhbHNjaGVyIFBhcmFtZXRlclxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgYW5hbHl6ZSBDUFUgJWQgYXMgaXQgZG9lc24ndCBzZWVtIHRvIGJlIHByZXNlbnRcbiIKK21zZ3N0ciAiIgorIktvbm50ZSBuaWNodCBkaWUgQ1BVICVkIGFuYWx5c2llcmVuLCBkYSBzaWUgKHNjaGVpbmJhcj8pIG5pY2h0IGV4aXN0aWVydC5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjIwIHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbHlzaWVyZSBDUFUgJWQ6XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxdWVuY3ktc2V0IFtvcHRpb25zXVxuIgorbXNnc3RyICJBdWZydWY6IGNwdWZyZXEtc2V0IFtPcHRpb25lbl1cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbmV3IG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgIG5ldWUgbWluaW1hbGUgVGFrdGZyZXF1ZW56LCBkaWUgZGVyIFJlZ2xlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1c3fkaGxlbiBkYXJmXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXUgRlJFUSwgLS1tYXggRlJFUSAgICAgIG5ldyBtYXhpbXVtIENQVSBmcmVxdWVuY3kgdGhlIGdvdmVybm9yIG1heSAiCisic2VsZWN0XG4iCittc2dzdHIgIiIKKyIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBuZXVlIG1heGltYWxlIFRha3RmcmVxdWVueiwgZGllIGRlciBSZWdsZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXN35GhsZW4gZGFyZlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWcgR09WLCAtLWdvdmVybm9yIEdPViAgIG5ldyBjcHVmcmVxIGdvdmVybm9yXG4iCittc2dzdHIgIiAgLWcgR09WLCAtLWdvdmVybm9ycyBHT1YgIHdlY2hzbGUgenUgUmVnbGVyIEdPVlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1mIEZSRVEsIC0tZnJlcSBGUkVRICAgICBzcGVjaWZpYyBmcmVxdWVuY3kgdG8gYmUgc2V0LiBSZXF1aXJlcyB1c2Vyc3BhY2VcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Zlcm5vciB0byBiZSBhdmFpbGFibGUgYW5kIGxvYWRlZFxuIgorbXNnc3RyICIiCisiICAtZiBGUkVRLCAtLWZyZXEgRlJFUSAgICAgc2V0emUgZXhha3RlIFRha3RmcmVxdWVuei4gQmVu9nRpZ3QgZGVuIFJlZ2xlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICd1c2Vyc3BhY2UnLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXIsIC0tcmVsYXRlZCAgICAgICAgICAgIFN3aXRjaGVzIGFsbCBoYXJkd2FyZS1yZWxhdGVkIENQVXNcbiIKK21zZ3N0ciAiIgorIiAgLXIsIC0tcmVsYXRlZCAgICAgICAgICAgIFNldHplIFdlcnRlIGb8ciBhbGxlIENQVXMsIGRlcmVuIFRha3RmcmVxdWVuelxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmR3YXJlYmVkaW5ndCBpZGVudGlzY2ggaXN0LlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMzIHV0aWxzL2NwdXBvd2VyLXNldC5jOjI4IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgIEdpYnQgZGllc2UgS3VyevxiZXJzaWNodCBhdXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGVzOlxuIgorIjEuIE9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gXCJhbGxcIlxuIgorbXNnc3RyICIiCisiQmVpIGRlbiBtaXQgKiBtYXJraWVydGVuIFBhcmFtZXRlcm4gd2lyZCAnLS1jcHUgMCcgYW5nZW5vbW1lbiwgc293ZWl0IG5pY2h0XG4iCisibWl0dGVscyAtYyBvZGVyIC0tY3B1IGV0d2FzIGFuZGVyZXMgYW5nZWdlYmVuIHdpcmRcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIjIuIFRoZSAtZiBGUkVRLCAtLWZyZXEgRlJFUSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyICIKKyJwYXJhbWV0ZXJcbiIKKyIgICBleGNlcHQgdGhlIC1jIENQVSwgLS1jcHUgQ1BVIHBhcmFtZXRlclxuIgorIjMuIEZSRVF1ZW5jaWVzIGNhbiBiZSBwYXNzZWQgaW4gSHosIGtIeiAoZGVmYXVsdCksIE1IeiwgR0h6LCBvciBUSHpcbiIKKyIgICBieSBwb3N0Zml4aW5nIHRoZSB2YWx1ZSB3aXRoIHRoZSB3YW50ZWQgdW5pdCBuYW1lLCB3aXRob3V0IGFueSBzcGFjZVxuIgorIiAgIChGUkVRdWVuY3kgaW4ga0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS5cbiIKK21zZ3N0ciAiIgorIkhpbndlaXNlOlxuIgorIjEuIFNvZmVybiBrZWluIC1jIG9kZXIgLS1jcHUtUGFyYW1ldGVyIGFuZ2VnZWJlbiBpc3QsIHdpcmQgJy0tY3B1IDAnXG4iCisiICAgYW5nZW5vbW1lblxuIgorIjIuIERlciBQYXJhbWV0ZXIgLWYgYnp3LiAtLWZyZXEga2FubiBtaXQga2VpbmVtIGFuZGVyZW4gYWxzIGRlbSBQYXJhbWV0ZXJcbiIKKyIgICAtYyBiencuIC0tY3B1IGtvbWJpbmllcnQgd2VyZGVuXG4iCisiMy4gRlJFUXVlbnplbiBr9m5uZW4gaW4gSHosIGtIeiAoU3RhbmRhcmQpLCBNSHosIEdIeiBvZGVyIFRIeiBlaW5nZWdlYmVuXG4iCisiICAgd2VyZGVuLCBpbmRlbSBkZXIgV2VydCB1bmQgdW5taXR0ZWxiYXIgYW5zY2hsaWXfZW5kIChvaG5lIExlZXJ6ZWljaGVuISlcbiIKKyIgICBkaWUgRWluaGVpdCBhbmdlZ2ViZW4gd2VyZGVuLiAoQnNwOiAxR0h6IClcbiIKKyIgICAoRlJFUXVlbnogaW4ga0h6ID1eIE1IeiAqIDEwMDAgPV4gR0h6ICogMTAwMDAwMCkuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIHNldHRpbmcgbmV3IHZhbHVlcy4gQ29tbW9uIGVycm9yczpcbiIKKyItIERvIHlvdSBoYXZlIHByb3BlciBhZG1pbmlzdHJhdGlvbiByaWdodHM/IChzdXBlci11c2VyPylcbiIKKyItIElzIHRoZSBnb3Zlcm5vciB5b3UgcmVxdWVzdGVkIGF2YWlsYWJsZSBhbmQgbW9kcHJvYmVkP1xuIgorIi0gVHJ5aW5nIHRvIHNldCBhbiBpbnZhbGlkIHBvbGljeT9cbiIKKyItIFRyeWluZyB0byBzZXQgYSBzcGVjaWZpYyBmcmVxdWVuY3ksIGJ1dCB1c2Vyc3BhY2UgZ292ZXJub3IgaXMgbm90ICIKKyJhdmFpbGFibGUsXG4iCisiICAgZm9yIGV4YW1wbGUgYmVjYXVzZSBvZiBoYXJkd2FyZSB3aGljaCBjYW5ub3QgYmUgc2V0IHRvIGEgc3BlY2lmaWMgIgorImZyZXF1ZW5jeVxuIgorIiAgIG9yIGJlY2F1c2UgdGhlIHVzZXJzcGFjZSBnb3Zlcm5vciBpc24ndCBsb2FkZWQ/XG4iCittc2dzdHIgIiIKKyJCZWltIEVpbnN0ZWxsZW4gaXN0IGVpbiBGZWhsZXIgYXVmZ2V0cmV0ZW4uIFR5cGlzY2hlIEZlaGxlcnF1ZWxsZW4gc2luZDpcbiIKKyItIG5pY2h0IGF1c3JlaWNoZW5kZSBSZWNodGUgKEFkbWluaXN0cmF0b3IpXG4iCisiLSBkZXIgUmVnbGVyIGlzdCBuaWNodCB2ZXJm/GdiYXIgYnp3LiBuaWNodCBnZWxhZGVuXG4iCisiLSBkaWUgYW5nZWdlYmVuZSBUYWt0aWsgaXN0IGlua29ycmVrdFxuIgorIi0gZWluZSBzcGV6aWZpc2NoZSBGcmVxdWVueiB3dXJkZSBhbmdlZ2ViZW4sIGFiZXIgZGVyIFJlZ2xlciAndXNlcnNwYWNlJ1xuIgorIiAga2FubiBlbnR3ZWRlciBoYXJkd2FyZWJlZGluZ3QgbmljaHQgZ2VudXR6dCB3ZXJkZW4gb2RlciBpc3QgbmljaHQgZ2VsYWRlblxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZywgdW5rbm93biBvciB1bmhhbmRsZWQgQ1BVP1xuIgorbXNnc3RyICJ1bmJla2FubnRlIG9kZXIgbmljaHQgcmVnZWxiYXJlIENQVVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIC1mLy0tZnJlcSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWQvLS1taW4sIC11Ly0tbWF4IG9yXG4iCisiLWcvLS1nb3Zlcm5vciBwYXJhbWV0ZXJzXG4iCittc2dzdHIgIiIKKyJEZXIgLWYgYnp3LiAtLWZyZXEtUGFyYW1ldGVyIGthbm4gbmljaHQgbWl0IGRlbiBQYXJhbWV0ZXJuIC1kLy0tbWluLCAtdS8tLSIKKyJtYXhcbiIKKyJvZGVyIC1nLy0tZ292ZXJub3Iga29tYmluaWVydCB3ZXJkZW5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3V0IG9mIC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4LCBhbmRcbiIKKyItZy8tLWdvdmVybm9yIG11c3QgYmUgcGFzc2VkXG4iCittc2dzdHIgIiIKKyJFcyBtdXNzIG1pbmRlc3RlbnMgZWluIFBhcmFtZXRlciBhdXMgLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXggb2RlclxuIgorIi1nLy0tZ292ZXJub3IgYW5nZWdlYmVuIHdlcmRlbi5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjcHU6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIHNldCBbIC1iIHZhbCBdIFsgLW0gdmFsIF0gWyAtcyB2YWwgXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyBbVkFMXSAgICBTZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbSwgLS1zY2hlZC1tYyAgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1zLCAtLXNjaGVkLXNtdCBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgIgorInBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICItLXBlcmYtYmlhcyBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zY2hlZC1tYyBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtc210IHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1tYyAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHNjaGVkLXNtdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHBlcmYtYmlhcyB2YWx1ZSBvbiBDUFUgJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGluZm8gWyAtYiBdIFsgLW0gXSBbIC1zIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWIsIC0tcGVyZi1iaWFzICAgIEdldHMgQ1BVJ3MgcG93ZXIgdnMgcGVyZm9ybWFuY2UgcG9saWN5IG9uIHNvbWVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbCBtb2RlbHMgWzAtMTVdLCBzZWUgbWFucGFnZSBmb3IgZGV0YWlsc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtbSwgLS1zY2hlZC1tYyAgICAgR2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIgIC1wLCAtLXBvbGljeSAgICAgICAgIEZpbmRldCBkaWUgbW9tZW50YW5lIFRha3RpayBoZXJhdXMgKlxuIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXMsIC0tc2NoZWQtc210ICAgIEdldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJQYXNzaW5nIG5vIG9wdGlvbiB3aWxsIHNob3cgYWxsIGluZm8sIGJ5IGRlZmF1bHQgb25seSBvbiBjb3JlIDBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjLiBpZiBzeXNmcyBmaWxlIGlzIG1pc3NpbmcgaXQnczogZXJybm8gPT0gRU5PRU5UCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTA1IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHN1cHBvcnRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgSW50ZWwncyBwZXJmb3JtYW5jZSBiaWFzIHNldHRpbmdcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHBlcmYtYmlhcyB2YWx1ZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGVyZi1iaWFzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBbmFseXppbmcgQ1BVICVkOlxuIgorbXNnc3RyICJhbmFseXNpZXJlIENQVSAlZDpcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBObyBpZGxlIHN0YXRlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogQ2FuJ3QgcmVhZCBpZGxlIHN0YXRlIGluZm9cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIG1heCBpZGxlIHN0YXRlICV1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTnVtYmVyIG9mIGlkbGUgc3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQ4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgaWRsZSBzdGF0ZXM6IgorbXNnc3RyICIgIG32Z2xpY2hlIFRha3RmcmVxdWVuemVuOiAiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzL0Rlc2NyaXB0aW9uOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhdGVuY3k6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJEdXJhdGlvbjogJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBkcml2ZXJcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ1BVaWRsZSBkcml2ZXI6ICVzXG4iCittc2dzdHIgIiAgVHJlaWJlcjogJXNcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVWlkbGUgZ292ZXJub3I6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogQ2FuJ3QgcmVhZCBDLXN0YXRlIGluZm9cbiIKK21zZ3N0ciAiIgorCisjLiBwcmludGYoIkNzdGF0ZXM6ICVkXG4iLCBjc3RhdGVzKTsKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJhY3RpdmUgc3RhdGU6ICAgICAgICAgICAgQzBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF4X2NzdGF0ZTogICAgICAgICAgICAgIEMldVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAibWF4aW11bSBhbGxvd2VkIGxhdGVuY3k6ICVsdSB1c2VjXG4iCittc2dzdHIgIiAgTWF4aW1hbGUgRGF1ZXIgZWluZXMgVGFrdGZyZXF1ZW56d2VjaHNlbHM6ICIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXRlczpcdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQyVkOiAgICAgICAgICAgICAgICAgIHR5cGVbQyVkXSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21vdGlvblstLV0gZGVtb3Rpb25bLS1dICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGF0ZW5jeVslMDNsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZVslMDhsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXJhdGlvblslMDIwTHVdIFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGlkbGVpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJBdWZydWY6IGNwdWZyZXEtaW5mbyBbT3B0aW9uZW5dXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtcywgLS1zaWxlbnQgICAgICAgICBPbmx5IHNob3cgZ2VuZXJhbCBDLXN0YXRlIGluZm9ybWF0aW9uXG4iCittc2dzdHIgIiIKKyIgIC1lLCAtLWRlYnVnICAgICAgICAgIEVyemV1Z3QgZGV0YWlsbGllcnRlIEluZm9ybWF0aW9uZW4sIGhpbGZyZWljaFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgenVtIEF1ZnNw/HJlbiB2b24gRmVobGVyblxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvIgorImFjcGkvcHJvY2Vzc29yLyovcG93ZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiBvbGRlciBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIEVyemV1Z3QgSW5mb3JtYXRpb25lbiBpbiBlaW5lbSDkaG5saWNoZW0gRm9ybWF0IHp1ICIKKyJkZW1cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGRlciAvcHJvYy9jcHVmcmVxLURhdGVpIGluIDIuNC4gdW5kIGZy/GhlbiAyLjYuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBLZXJuZWwtVmVyc2lvbmVuXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjIwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIk1hbiBrYW5uIG5pY2h0IG1laHIgYWxzIGVpbmVuIC0tY3B1LVBhcmFtZXRlciB1bmQvb2RlciBtZWhyIGFscyBlaW5lblxuIgorImluZm9ybWF0aW9uc3NwZXppZmlzY2hlbiBQYXJhbWV0ZXIgZ2xlaWNoemVpdGlnIGFuZ2ViZW5cbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgIENQVSBudW1iZXIgd2hpY2ggaW5mb3JtYXRpb24gc2hhbGwgYmUgZGV0ZXJtaW5lZCAiCisjfiAiYWJvdXRcbiIKKyN+IG1zZ3N0ciAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgTnVtbWVyIGRlciBDUFUsIPxiZXIgZGllIEluZm9ybWF0aW9uZW4gIgorI34gImhlcmF1c2dlZnVuZGVuIHdlcmRlbiBzb2xsZW5cbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBudW1iZXIgb2YgQ1BVIHdoZXJlIGNwdWZyZXEgc2V0dGluZ3Mgc2hhbGwgYmUgIgorI34gIm1vZGlmaWVkXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBOdW1tZXIgZGVyIENQVSwgZGVyZW4gVGFrdGZyZXF1ZW56LSIKKyN+ICJFaW5zdGVsbHVuZ1xuIgorI34gIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlcmRlbiBzb2xsXG4iCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9wby9mci5wbyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2ZyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NWFkMjAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9wby9mci5wbwpAQCAtMCwwICsxLDk0NyBAQAorIyBGcmVuY2ggdHJhbnNsYXRpb25zIGZvciBjcHVmcmVxdXRpbHMgcGFja2FnZQorIyBDb3B5cmlnaHQgKEMpIDIwMDQgVEhFIFBBQ0tBR0UnUyBDT1BZUklHSFQgSE9MREVSCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBjcHVmcmVxdXRpbHMgcGFja2FnZS4KKyMgRHVjcm90IEJydW5vIDxkdWNyb3RAcG91cGlub3Uub3JnPiwgMjAwNC4KKyMKKyMsIGZ1enp5Cittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBjcHVmcmVxdXRpbHMgMC4xLXByZTJcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDMtMDggMTc6MDMrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDQtMTEtMTcgMTU6NTMrMTAwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogQnJ1bm8gRHVjcm90IDxkdWNyb3RAcG91cGlub3Uub3JnPlxuIgorIkxhbmd1YWdlLVRlYW06IE5PTkVcbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6MzYKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo0MworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM2IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjUxCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzMiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTggdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjcwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6MzMKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzo0MAorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMyIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQ3Cittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzciCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjU2Cittc2dpZCAiUGFja2FnZSBpbiBzbGVlcCBzdGF0ZSAoUEMxIG9yIGRlZXBlcikiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjYzCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzEiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjc3Cittc2dpZCAiTm9ydGggQnJpZGdlIFAxIGJvb2xlYW4gY291bnRlciAocmV0dXJucyAwIG9yIDEpIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6MzUKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBub3QgaWRsZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjQyCittc2dpZCAiUHJvY2Vzc29yIENvcmUgaW4gYW4gaWRsZSBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjUwCittc2dpZCAiQXZlcmFnZSBGcmVxdWVuY3kgKGluY2x1ZGluZyBib29zdCkgaW4gTUh6IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNwdXBvd2VyIG1vbml0b3I6IFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy12XSBbLWhdIFsgWy10XSB8IFstbF0gfCBbLW0gPG1vbjE+LFs8bW9uMj5dIF0gXSBbLWkgIgorImludGVydmFsX3NlYyB8IC1jIGNvbW1hbmQgLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXY6IGJlIG1vcmUgdmVyYm9zZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWg6IHByaW50IHRoaXMgaGVscFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWk6IHRpbWUgaW50ZXJ2YWxsIHRvIG1lYXN1cmUgZm9yIGluIHNlY29uZHMgKGRlZmF1bHQgMSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC10OiBzaG93IENQVSB0b3BvbG9neS9oaWVyYXJjaHlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1sOiBsaXN0IGF2YWlsYWJsZSBDUFUgc2xlZXAgbW9uaXRvcnMgKGZvciB1c2Ugd2l0aCAtbSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1tOiBzaG93IHNwZWNpZmljIENQVSBzbGVlcCBtb25pdG9ycyBvbmx5IChpbiBzYW1lIG9yZGVyKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9ubHkgb25lIG9mOiAtdCwgLWwsIC1tIGFyZSBhbGxvd2VkXG4iCisiSWYgbm9uZSBvZiB0aGVtIGlzIHBhc3NlZCwiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgYWxsIHN1cHBvcnRlZCBtb25pdG9ycyBhcmUgc2hvd25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yICVzLCBDb3VudGVyICVzIGhhcyBubyBjb3VudCBmdW5jdGlvbi4gSW1wbGVtZW50YXRpb24gZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKmlzIG9mZmxpbmVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbWF4IG1vbml0b3IgbmFtZSBsZW5ndGggKCVkKSBleGNlZWRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1hdGNoaW5nIG1vbml0b3IgZm91bmQgaW4gJXMsIHRyeSAtbCBvcHRpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yIFwiJXNcIiAoJWQgc3RhdGVzKSAtIE1pZ2h0IG92ZXJmbG93IGFmdGVyICV1IHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0b29rICUuNWYgc2Vjb25kcyBhbmQgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlYWQgbnVtYmVyIG9mIGF2YWlsYWJsZSBwcm9jZXNzb3JzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIG1vbml0b3IgJXMgbmVlZHMgcm9vdCBhY2Nlc3NcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBIVyBDc3RhdGUgbW9uaXRvcnMgZm91bmRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIFsgLWMgY3B1bGlzdCBdIHN1YmNvbW1hbmQgW0FSR1NdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjcHVwb3dlciAtLXZlcnNpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnRlZCBzdWJjb21tYW5kcyBhcmU6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU29tZSBzdWJjb21tYW5kcyBjYW4gbWFrZSB1c2Ugb2YgdGhlIC1jIGNwdWxpc3Qgb3B0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9vayBhdCB0aGUgZ2VuZXJhbCBjcHVwb3dlciBtYW5wYWdlIGhvdyB0byB1c2UgaXRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImFuZCByZWFkIHVwIHRoZSBzdWJjb21tYW5kJ3MgbWFucGFnZSB3aGV0aGVyIGl0IGlzIHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJVc2UgY3B1cG93ZXIgaGVscCBzdWJjb21tYW5kIGZvciBnZXR0aW5nIGhlbHAgZm9yIGFib3ZlIHN1YmNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGVycm9ycyBhbmQgYnVncyB0byAlcywgcGxlYXNlLlxuIgorbXNnc3RyICJWZXVpbGxleiByYXBwb3J0ZXogbGVzIGVycmV1cnMgZXQgbGVzIGJvZ3VlcyDgICVzLCBzJ2lsIHZvdXMgcGxhaXQuXG4iCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHBhcnNpbmcgY3B1IGxpc3RcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJjb21tYW5kICVzIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNvdW50IHRoZSBudW1iZXIgb2YgQ1BVcyAoJXM6ICVzKSwgYXNzdW1pbmcgMVxuIgorbXNnc3RyICJE6XRlcm1pbmF0aW9uIGR1IG5vbWJyZSBkZSBDUFVzICglcyA6ICVzKSBpbXBvc3NpYmxlLiAgQXNzdW1lIDFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgICAgICAgICBtaW5pbXVtIENQVSBmcmVxdWVuY3kgIC0gIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgZ292ZXJub3JcbiIKK21zZ3N0ciAiIgorIiAgICAgICAgIEZy6XF1ZW5jZSBDUFUgbWluaW1hbGUgLSBGculxdWVuY2UgQ1BVIG1heGltYWxlICAtIHLpZ3VsYXRldXJcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGV2YWx1YXRpbmcgQm9vc3QgQ2FwYWJpbGl0aWVzIG9uIENQVSAlZCAtLSBhcmUgeW91IHJvb3Q/XG4iCittc2dzdHIgIiIKKworIy4gUCBzdGF0ZSBjaGFuZ2VzIHZpYSBNU1IgYXJlIGlkZW50aWZpZWQgdmlhIGNwdWlkIDgwMDAwMDA3CisjLiBvbiBJbnRlbCBhbmQgQU1ELCBidXQgd2UgYXNzdW1lIGJvb3N0IGNhcGFibGUgbWFjaGluZXMgY2FuIGRvIHRoYXQKKyMuIGlmIChjcHVpZF9lYXgoMHg4MDAwMDAwMCkgPj0gMHg4MDAwMDAwNworIy4gJiYgKGNwdWlkX2VkeCgweDgwMDAwMDA3KSAmICgxIDw8IDcpKSkKKyMuCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBib29zdCBzdGF0ZSBzdXBwb3J0OiBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMgdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0Cittc2dpZCAieWVzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MyB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKK21zZ2lkICJubyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgICBBY3RpdmU6ICVzXG4iCittc2dzdHIgIiAgcGlsb3RlIDogJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBCb29zdCBTdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBUb3RhbCBTdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBQc3RhdGUtUGIlZDogJWx1TUh6IChib29zdCBzdGF0ZSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFBzdGF0ZS1QJWQ6ICAlbHVNSHpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBubyBvciB1bmtub3duIGNwdWZyZXEgZHJpdmVyIGlzIGFjdGl2ZSBvbiB0aGlzIENQVVxuIgorbXNnc3RyICIgIHBhcyBkZSBwaWxvdGVzIGNwdWZyZXEgcmVjb25udSBwb3VyIGNlIENQVVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBkcml2ZXI6ICVzXG4iCittc2dzdHIgIiAgcGlsb3RlIDogJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjE5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlIGZyZXF1ZW5jeTogIgorbXNnc3RyICIgIENQVXMgcXVpIGRvaXZlbnQgY2hhbmdlciBkZSBmculxdWVuY2VzIGVuIG3qbWUgdGVtcHMgOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICBDUFVzIHdoaWNoIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3kgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmU6ICIKK21zZ3N0ciAiICBDUFVzIHF1aSBkb2l2ZW50IGNoYW5nZXIgZGUgZnLpcXVlbmNlcyBlbiBt6m1lIHRlbXBzIDogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBtYXhpbXVtIHRyYW5zaXRpb24gbGF0ZW5jeTogIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI0NworIywgYy1mb3JtYXQKK21zZ2lkICIgIGhhcmR3YXJlIGxpbWl0czogIgorbXNnc3RyICIgIGxpbWl0YXRpb24gbWF06XJpZWxsZSA6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYXZhaWxhYmxlIGZyZXF1ZW5jeSBzdGVwczogIgorbXNnc3RyICIgIHBsYWdlIGRlIGZy6XF1ZW5jZSA6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzOiAiCittc2dzdHIgIiAgculndWxhdGV1cnMgZGlzcG9uaWJsZXMgOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIGN1cnJlbnQgcG9saWN5OiBmcmVxdWVuY3kgc2hvdWxkIGJlIHdpdGhpbiAiCittc2dzdHIgIiAgdGFjdGlxdWUgYWN0dWVsbGUgOiBsYSBmculxdWVuY2UgZG9pdCDqdHJlIGNvbXByaXNlIGVudHJlICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbmQgIgorbXNnc3RyICIgZXQgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBnb3Zlcm5vciBcIiVzXCIgbWF5IGRlY2lkZSB3aGljaCBzcGVlZCB0byB1c2VcbiIKKyIgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhpcyByYW5nZS5cbiIKK21zZ3N0ciAiIgorIkxlIHLpZ3VsYXRldXIgXCIlc1wiIGVzdCBsaWJyZSBkZSBjaG9pc2lyIGxhIHZpdGVzc2VcbiIKKyIgICAgICAgICAgICAgICAgICBkYW5zIGNldHRlIHBsYWdlIGRlIGZy6XF1ZW5jZXMuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICIgIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSBpcyAiCittc2dzdHIgIiAgbGEgZnLpcXVlbmNlIGFjdHVlbGxlIGRlIGNlIENQVSBlc3QgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIChhc3NlcnRlZCBieSBjYWxsIHRvIGhhcmR3YXJlKSIKK21zZ3N0ciAiICh26XJpZmnpIHBhciB1biBhcHBlbCBkaXJlY3QgZHUgbWF06XJpZWwpIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjcHVmcmVxIHN0YXRzOiAiCittc2dzdHIgIiAgZGVzIHN0YXRpc3RpcXVlIGNvbmNlcm5hbnQgY3B1ZnJlcToiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGZyZXFpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJVc2FnZSA6IGNwdWZyZXEtaW5mbyBbb3B0aW9uc11cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDczIHV0aWxzL2NwdWZyZXEtc2V0LmM6MjYgdXRpbHMvY3B1cG93ZXItc2V0LmM6MjMKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uczpcbiIKK21zZ3N0ciAiT3B0aW9ucyA6XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBQcmludHMgb3V0IGRlYnVnIGluZm9ybWF0aW9uIFtkZWZhdWx0XVxuIgorbXNnc3RyICIgIC1lLCAtLWRlYnVnICAgICAgICAgIEFmZmljaGVyIGxlcyBpbmZvcm1hdGlvbnMgZGUgZOlib2d1YWdlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGFjY29yZGluZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGNwdWZyZXEgY29yZSAqXG4iCittc2dzdHIgIiIKKyIgIC1mLCAtLWZyZXEgICAgICAgICAgIE9idGVuaXIgbGEgZnLpcXVlbmNlIGFjdHVlbGxlIGR1IENQVSBzZWxvbiBsZSBwb2ludFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgZGUgdnVlIGR1IGNvZXVyIGR1IHN5c3TobWUgZGUgY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdywgLS1od2ZyZXEgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGJ5IHJlYWRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGl0IGZyb20gaGFyZHdhcmUgKG9ubHkgYXZhaWxhYmxlIHRvIHJvb3QpICpcbiIKK21zZ3N0ciAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgT2J0ZW5pciBsYSBmculxdWVuY2UgYWN0dWVsbGUgZHUgQ1BVIGRpcmVjdGVtZW50IHBhclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgbGUgbWF06XJpZWwgKGRvaXQg6nRyZSByb290KSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBEZXRlcm1pbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSAiCisiYWxsb3dlZCAqXG4iCittc2dzdHIgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIEFmZmljaGUgbGVzIGZy6XF1ZW5jZXMgbWluaW1hbGVzIGV0IG1heGltYWxlcyBkdSBDUFUgIgorIipcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWQsIC0tZHJpdmVyICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgdXNlZCBjcHVmcmVxIGtlcm5lbCBkcml2ZXIgKlxuIgorbXNnc3RyICIgIC1kLCAtLWRyaXZlciAgICAgICAgIEFmZmljaGUgbGUgcGlsb3RlIGNwdWZyZXEgdXRpbGlz6SAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1wLCAtLXBvbGljeSAgICAgICAgIEdldHMgdGhlIGN1cnJlbnRseSB1c2VkIGNwdWZyZXEgcG9saWN5ICpcbiIKK21zZ3N0ciAiICAtcCwgLS1wb2xpY3kgICAgICAgICBBZmZpY2hlIGxhIHRhY3RpcXVlIGFjdHVlbGxlIGRlIGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZywgLS1nb3Zlcm5vcnMgICAgICBEZXRlcm1pbmVzIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9ycyAqXG4iCittc2dzdHIgIiIKKyIgIC1nLCAtLWdvdmVybm9ycyAgICAgIEFmZmljaGUgbGVzIHLpZ3VsYXRldXJzIGRpc3BvbmlibGVzIGRlIGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODMKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1yLCAtLXJlbGF0ZWQtY3B1cyAgIERldGVybWluZXMgd2hpY2ggQ1BVcyBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgIgorImZyZXF1ZW5jeSAqXG4iCittc2dzdHIgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgICBBZmZpY2hlIHF1ZWxzIHNvbnQgbGVzIENQVXMgcXVpIGRvaXZlbnQgY2hhbmdlciBkZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgIGZy6XF1ZW5jZXMgZW4gbeptZSB0ZW1wcyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgRGV0ZXJtaW5lcyB3aGljaCBDUFVzIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3lcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlICpcbiIKK21zZ3N0ciAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgIEFmZmljaGUgcXVlbHMgc29udCBsZXMgQ1BVcyBxdWkgZG9pdmVudCBjaGFuZ2VyIGRlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgZnLpcXVlbmNlcyBlbiBt6m1lIHRlbXBzICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc3RhdHMgICAgICAgICAgU2hvd3MgY3B1ZnJlcSBzdGF0aXN0aWNzIGlmIGF2YWlsYWJsZVxuIgorbXNnc3RyICIiCisiICAtcywgLS1zdGF0cyAgICAgICAgICBJbmRpcXVlIGRlcyBzdGF0aXN0aXF1ZXMgY29uY2VybmFudCBjcHVmcmVxLCBzaVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9uaWJsZXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAteSwgLS1sYXRlbmN5ICAgICAgICBEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGxhdGVuY3kgb24gQ1BVIGZyZXF1ZW5jeSAiCisiY2hhbmdlcyAqXG4iCittc2dzdHIgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIEFmZmljaGUgbGVzIGZy6XF1ZW5jZXMgbWluaW1hbGVzIGV0IG1heGltYWxlcyBkdSBDUFUgIgorIipcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWIsIC0tYm9vc3QgICAgICAgICAgQ2hlY2tzIGZvciB0dXJibyBvciBib29zdCBtb2RlcyAgKlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jLyIKKyJjcHVmcmVxXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gMi40LiBhbmQgZWFybHkgMi42LiBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIEFmZmljaGUgbGVzIGluZm9ybWF0aW9ucyBlbiB1dGlsaXNhbnQgbCdpbnRlcmZhY2VcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGZvdXJuaWUgcGFyIC9wcm9jL2NwdWZyZXEsIHBy6XNlbnRlIGRhbnMgbGVzICIKKyJ2ZXJzaW9uc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgMi40IGV0IGxlcyBhbmNpZW5uZXMgdmVyc2lvbnMgMi42IGR1IG5veWF1XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgaHVtYW4tcmVhZGFibGUgb3V0cHV0IGZvciB0aGUgLWYsIC13LCAtcyBhbmQgLXkgIgorInBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgIGFmZmljaGUgZGFucyB1biBmb3JtYXQgbGlzaWJsZSBwb3VyIHVuIGh1bWFpblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgIHBvdXIgbGVzIG9wdGlvbnMgLWYsIC13IGV0IC1zIChNSHosIEdIeilcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiICAtaCwgLS1oZWxwICAgICAgICAgICBhZmZpY2hlIGwnYWlkZS1t6W1vaXJlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgbm8gYXJndW1lbnQgb3Igb25seSB0aGUgLWMsIC0tY3B1IHBhcmFtZXRlciBpcyBnaXZlbiwgZGVidWcgb3V0cHV0IGFib3V0XG4iCisiY3B1ZnJlcSBpcyBwcmludGVkIHdoaWNoIGlzIHVzZWZ1bCBlLmcuIGZvciByZXBvcnRpbmcgYnVncy5cbiIKK21zZ3N0ciAiIgorIlBhciBk6WZhdXQsIGxlcyBpbmZvcm1hdGlvbnMgZGUgZOlib2d1YWdlIHNlcm9udCBhZmZpY2jpZXMgc2kgYXVjdW5cbiIKKyJhcmd1bWVudCwgb3UgYmllbiBzaSBzZXVsZW1lbnQgbCdhcmd1bWVudCAtYyAoLS1jcHUpIGVzdCBkb25u6SwgYWZpbiBkZVxuIgorImZhY2lsaXRlciBsZXMgcmFwcG9ydHMgZGUgYm9ndWVzIHBhciBleGVtcGxlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm9yIHRoZSBhcmd1bWVudHMgbWFya2VkIHdpdGggKiwgb21pdHRpbmcgdGhlIC1jIG9yIC0tY3B1IGFyZ3VtZW50IGlzXG4iCisiZXF1aXZhbGVudCB0byBzZXR0aW5nIGl0IHRvIHplcm9cbiIKK21zZ3N0ciAiTGVzIGFyZ3VtZW50cyBhdmVjIHVuICogdXRpbGlzZXJvbnQgbGUgQ1BVIDAgc2kgLWMgKC0tY3B1KSBlc3Qgb21pc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyB0b29sIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcGFzc2luZyBhIC0tY3B1ICIKKyJhcmd1bWVudFxuIgorbXNnc3RyICJDZXR0ZSBvcHRpb24gZXN0IGluY29tcGF0aWJsZSBhdmVjIC0tY3B1XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSAtLWNwdSBwYXJhbWV0ZXIgYW5kL29yXG4iCisibW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIk9uIG5lIHBldXQgaW5kaXF1ZXIgcGx1cyBkJ3VuIHBhcmFt6HRyZSAtLWNwdSwgdG91dCBjb21tZSBsJ29uIG5lIHBldXRcbiIKKyJzcOljaWZpZXIgcGx1cyBkJ3VuIGFyZ3VtZW50IGRlIGZvcm1hdGFnZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MDAgdXRpbHMvY3B1ZnJlcS1zZXQuYzo4MiB1dGlscy9jcHVwb3dlci1zZXQuYzo0MgorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjQyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIKK21zZ3N0ciAib3B0aW9uIGludmFsaWRlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBhbmFseXplIENQVSAlZCBhcyBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgcHJlc2VudFxuIgorbXNnc3RyICJhbmFseXNlIGR1IENQVSAlZCBpbXBvc3NpYmxlIHB1aXNxdSdpbCBuZSBzZW1ibGUgcGFzIOp0cmUgcHLpc2VudFxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MjAgdXRpbHMvY3B1cG93ZXItaW5mby5jOjE0MgorIywgYy1mb3JtYXQKK21zZ2lkICJhbmFseXppbmcgQ1BVICVkOlxuIgorbXNnc3RyICJhbmFseXNlIGR1IENQVSAlZCA6XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxdWVuY3ktc2V0IFtvcHRpb25zXVxuIgorbXNnc3RyICJVc2FnZSA6IGNwdWZyZXEtc2V0IFtvcHRpb25zXVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1kIEZSRVEsIC0tbWluIEZSRVEgICAgICBuZXcgbWluaW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgIgorInNlbGVjdFxuIgorbXNnc3RyICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgIG5vdXZlbGxlIGZy6XF1ZW5jZSBtaW5pbWFsZSBkdSBDUFUg4CB1dGlsaXNlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXIgbGUgculndWxhdGV1clxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBuZXcgbWF4aW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgIgorInNlbGVjdFxuIgorbXNnc3RyICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgIG5vdXZlbGxlIGZy6XF1ZW5jZSBtYXhpbWFsZSBkdSBDUFUg4CB1dGlsaXNlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXIgbGUgculndWxhdGV1clxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWcgR09WLCAtLWdvdmVybm9yIEdPViAgIG5ldyBjcHVmcmVxIGdvdmVybm9yXG4iCittc2dzdHIgIiAgLWcgR09WLCAtLWdvdmVybm9yIEdPViAgIGFjdGl2ZSBsZSBy6Wd1bGF0ZXVyIEdPVlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1mIEZSRVEsIC0tZnJlcSBGUkVRICAgICBzcGVjaWZpYyBmcmVxdWVuY3kgdG8gYmUgc2V0LiBSZXF1aXJlcyB1c2Vyc3BhY2VcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Zlcm5vciB0byBiZSBhdmFpbGFibGUgYW5kIGxvYWRlZFxuIgorbXNnc3RyICIiCisiICAtZiBGUkVRLCAtLWZyZXEgRlJFUSAgICAgZml4ZSBsYSBmculxdWVuY2UgZHUgcHJvY2Vzc2V1ciDgIEZSRVEuIElsIGZhdXRcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWUgbGUgculndWxhdGV1ciCrIHVzZXJzcGFjZSC7IHNvaXQgZGlzcG9uaWJsZSBcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBldCBhY3RpdukuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtciwgLS1yZWxhdGVkICAgICAgICAgICAgU3dpdGNoZXMgYWxsIGhhcmR3YXJlLXJlbGF0ZWQgQ1BVc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzMgdXRpbHMvY3B1cG93ZXItc2V0LmM6MjggdXRpbHMvY3B1cG93ZXItaW5mby5jOjI3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAgLWgsIC0taGVscCAgICAgICAgICAgYWZmaWNoZSBsJ2FpZGUtbeltb2lyZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90ZXM6XG4iCisiMS4gT21pdHRpbmcgdGhlIC1jIG9yIC0tY3B1IGFyZ3VtZW50IGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyBpdCB0byBcImFsbFwiXG4iCittc2dzdHIgIkxlcyBhcmd1bWVudHMgYXZlYyB1biAqIHV0aWxpc2Vyb250IGxlIENQVSAwIHNpIC1jICgtLWNwdSkgZXN0IG9taXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIjIuIFRoZSAtZiBGUkVRLCAtLWZyZXEgRlJFUSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyICIKKyJwYXJhbWV0ZXJcbiIKKyIgICBleGNlcHQgdGhlIC1jIENQVSwgLS1jcHUgQ1BVIHBhcmFtZXRlclxuIgorIjMuIEZSRVF1ZW5jaWVzIGNhbiBiZSBwYXNzZWQgaW4gSHosIGtIeiAoZGVmYXVsdCksIE1IeiwgR0h6LCBvciBUSHpcbiIKKyIgICBieSBwb3N0Zml4aW5nIHRoZSB2YWx1ZSB3aXRoIHRoZSB3YW50ZWQgdW5pdCBuYW1lLCB3aXRob3V0IGFueSBzcGFjZVxuIgorIiAgIChGUkVRdWVuY3kgaW4ga0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS5cbiIKK21zZ3N0ciAiIgorIlJlbWFycXVlIDpcbiIKKyIxLiBMZSBDUFUgbnVt6XJvIDAgc2VyYSB1dGlsaXPpIHBhciBk6WZhdXQgc2kgLWMgKG91IC0tY3B1KSBlc3Qgb21pcyA7XG4iCisiMi4gbCdhcmd1bWVudCAtZiBGUkVRIChvdSAtLWZyZXEgRlJFUSkgbmUgcGV1dCDqdHJlIHV0aWxpc+kgcXUnYXZlYyAtLWNwdSA7XG4iCisiMy4gb24gcG91cnJhIHBy6WNpc2VyIGwndW5pdOkgZGVzIGZy6XF1ZW5jZXMgZW4gcG9zdGZpeGFudCBzYW5zIGF1Y3VuZSAiCisiZXNwYWNlXG4iCisiICAgbGVzIHZhbGV1cnMgcGFyIGh6LCBrSHogKHBhciBk6WZhdXQpLCBNSHosIEdIeiBvdSBUSHpcbiIKKyIgICAoa0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3Igc2V0dGluZyBuZXcgdmFsdWVzLiBDb21tb24gZXJyb3JzOlxuIgorIi0gRG8geW91IGhhdmUgcHJvcGVyIGFkbWluaXN0cmF0aW9uIHJpZ2h0cz8gKHN1cGVyLXVzZXI/KVxuIgorIi0gSXMgdGhlIGdvdmVybm9yIHlvdSByZXF1ZXN0ZWQgYXZhaWxhYmxlIGFuZCBtb2Rwcm9iZWQ/XG4iCisiLSBUcnlpbmcgdG8gc2V0IGFuIGludmFsaWQgcG9saWN5P1xuIgorIi0gVHJ5aW5nIHRvIHNldCBhIHNwZWNpZmljIGZyZXF1ZW5jeSwgYnV0IHVzZXJzcGFjZSBnb3Zlcm5vciBpcyBub3QgIgorImF2YWlsYWJsZSxcbiIKKyIgICBmb3IgZXhhbXBsZSBiZWNhdXNlIG9mIGhhcmR3YXJlIHdoaWNoIGNhbm5vdCBiZSBzZXQgdG8gYSBzcGVjaWZpYyAiCisiZnJlcXVlbmN5XG4iCisiICAgb3IgYmVjYXVzZSB0aGUgdXNlcnNwYWNlIGdvdmVybm9yIGlzbid0IGxvYWRlZD9cbiIKK21zZ3N0ciAiIgorIkVuIGFqdXN0YW50IGxlcyBub3V2ZWF1eCBwYXJhbeh0cmVzLCB1bmUgZXJyZXVyIGVzdCBhcHBhcnVlLiBMZXMgc291cmNlc1xuIgorImQnZXJyZXVyIHR5cGlxdWUgc29udCA6XG4iCisiLSBkcm9pdCBkJ2FkbWluaXN0cmF0aW9uIGluc3VmZmlzYW50ICjqdGVzLXZvdXMgcm9vdCA/KSA7XG4iCisiLSBsZSBy6Wd1bGF0ZXVyIGNob2lzaSBuJ2VzdCBwYXMgZGlzcG9uaWJsZSwgb3UgYmllbiBuJ2VzdCBwYXMgZGlzcG9uaWJsZSAiCisiZW5cbiIKKyIgIHRhbnQgcXVlIG1vZHVsZSBub3lhdSA7XG4iCisiLSBsYSB0YWN0aXF1ZSBuJ2VzdCBwYXMgZGlzcG9uaWJsZSA7XG4iCisiLSB2b3VzIHZvdWxleiB1dGlsaXNlciBsJ29wdGlvbiAtZi8tLWZyZXEsIG1haXMgbGUgculndWxhdGV1ciCrIHVzZXJzcGFjZSC7XG4iCisiICBuJ2VzdCBwYXMgZGlzcG9uaWJsZSwgcGFyIGV4ZW1wbGUgcGFyY2UgcXVlIGxlIG1hdOlyaWVsIG5lIGxlIHN1cHBvcnRlXG4iCisiICBwYXMsIG91IGJpZW4gbidlc3QgdG91dCBzaW1wbGVtZW50IHBhcyBjaGFyZ+kuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nLCB1bmtub3duIG9yIHVuaGFuZGxlZCBDUFU/XG4iCittc2dzdHIgIkNQVSBpbmNvbm51IG91IG5vbiBzdXBwb3J06SA/XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgLWYvLS1mcmVxIHBhcmFtZXRlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtZC8tLW1pbiwgLXUvLS1tYXggb3JcbiIKKyItZy8tLWdvdmVybm9yIHBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorImwnb3B0aW9uIC1mLy0tZnJlcSBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgbGVzIG9wdGlvbnMgLWQvLS1taW4sIC11Ly0tbWF4IGV0XG4iCisiLWcvLS1nb3Zlcm5vclxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXQgbGVhc3Qgb25lIHBhcmFtZXRlciBvdXQgb2YgLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXgsIGFuZFxuIgorIi1nLy0tZ292ZXJub3IgbXVzdCBiZSBwYXNzZWRcbiIKK21zZ3N0ciAiIgorIkwndW4gZGUgY2VzIHBhcmFt6HRyZXMgZXN0IG9ibGlnYXRvaXJlIDogLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXggZXRcbiIKKyItZy8tLWdvdmVybm9yXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3B1OiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBzZXQgWyAtYiB2YWwgXSBbIC1tIHZhbCBdIFsgLXMgdmFsIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYiwgLS1wZXJmLWJpYXMgW1ZBTF0gICAgU2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0tc2NoZWQtbWMgIFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtcywgLS1zY2hlZC1zbXQgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyICIKKyJwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1wZXJmLWJpYXMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtbWMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICItLXNjaGVkLXNtdCBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgc2NoZWQtbWMgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1zbXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBwZXJmLWJpYXMgdmFsdWUgb24gQ1BVICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBpbmZvIFsgLWIgXSBbIC1tIF0gWyAtcyBdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyAgICBHZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLW0sIC0tc2NoZWQtbWMgICAgIEdldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiICAtcCwgLS1wb2xpY3kgICAgICAgICBBZmZpY2hlIGxhIHRhY3RpcXVlIGFjdHVlbGxlIGRlIGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXMsIC0tc2NoZWQtc210ICAgIEdldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJQYXNzaW5nIG5vIG9wdGlvbiB3aWxsIHNob3cgYWxsIGluZm8sIGJ5IGRlZmF1bHQgb25seSBvbiBjb3JlIDBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjLiBpZiBzeXNmcyBmaWxlIGlzIG1pc3NpbmcgaXQnczogZXJybm8gPT0gRU5PRU5UCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTA1IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHN1cHBvcnRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgSW50ZWwncyBwZXJmb3JtYW5jZSBiaWFzIHNldHRpbmdcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHBlcmYtYmlhcyB2YWx1ZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGVyZi1iaWFzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBbmFseXppbmcgQ1BVICVkOlxuIgorbXNnc3RyICJhbmFseXNlIGR1IENQVSAlZCA6XG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogTm8gaWRsZSBzdGF0ZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgaWRsZSBzdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBtYXggaWRsZSBzdGF0ZSAldVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk51bWJlciBvZiBpZGxlIHN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGlkbGUgc3RhdGVzOiIKK21zZ3N0ciAiICBwbGFnZSBkZSBmculxdWVuY2UgOiAiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzL0Rlc2NyaXB0aW9uOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhdGVuY3k6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJEdXJhdGlvbjogJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBkcml2ZXJcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ1BVaWRsZSBkcml2ZXI6ICVzXG4iCittc2dzdHIgIiAgcGlsb3RlIDogJXNcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVWlkbGUgZ292ZXJub3I6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogQ2FuJ3QgcmVhZCBDLXN0YXRlIGluZm9cbiIKK21zZ3N0ciAiIgorCisjLiBwcmludGYoIkNzdGF0ZXM6ICVkXG4iLCBjc3RhdGVzKTsKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJhY3RpdmUgc3RhdGU6ICAgICAgICAgICAgQzBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF4X2NzdGF0ZTogICAgICAgICAgICAgIEMldVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyOQorIywgYy1mb3JtYXQKK21zZ2lkICJtYXhpbXVtIGFsbG93ZWQgbGF0ZW5jeTogJWx1IHVzZWNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhdGVzOlx0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDJWQ6ICAgICAgICAgICAgICAgICAgdHlwZVtDJWRdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvbW90aW9uWy0tXSBkZW1vdGlvblstLV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJsYXRlbmN5WyUwM2x1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlWyUwOGx1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmF0aW9uWyUwMjBMdV0gXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgaWRsZWluZm8gW29wdGlvbnNdXG4iCittc2dzdHIgIlVzYWdlIDogY3B1ZnJlcS1pbmZvIFtvcHRpb25zXVxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc2lsZW50ICAgICAgICAgT25seSBzaG93IGdlbmVyYWwgQy1zdGF0ZSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICIgIC1lLCAtLWRlYnVnICAgICAgICAgIEFmZmljaGVyIGxlcyBpbmZvcm1hdGlvbnMgZGUgZOlib2d1YWdlXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy8iCisiYWNwaS9wcm9jZXNzb3IvKi9wb3dlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIG9sZGVyIGtlcm5lbHNcbiIKK21zZ3N0ciAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgQWZmaWNoZSBsZXMgaW5mb3JtYXRpb25zIGVuIHV0aWxpc2FudCBsJ2ludGVyZmFjZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgZm91cm5pZSBwYXIgL3Byb2MvY3B1ZnJlcSwgcHLpc2VudGUgZGFucyBsZXMgIgorInZlcnNpb25zXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAyLjQgZXQgbGVzIGFuY2llbm5lcyB2ZXJzaW9ucyAyLjYgZHUgbm95YXVcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIgorbXNnc3RyICIiCisiT24gbmUgcGV1dCBpbmRpcXVlciBwbHVzIGQndW4gcGFyYW3odHJlIC0tY3B1LCB0b3V0IGNvbW1lIGwnb24gbmUgcGV1dFxuIgorInNw6WNpZmllciBwbHVzIGQndW4gYXJndW1lbnQgZGUgZm9ybWF0YWdlXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICBDUFUgbnVtYmVyIHdoaWNoIGluZm9ybWF0aW9uIHNoYWxsIGJlIGRldGVybWluZWQgIgorI34gImFib3V0XG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgIE51belybyBkdSBDUFUgcG91ciBsZXF1ZWwgbCdpbmZvcm1hdGlvbiBzZXJhICIKKyN+ICJhZmZpY2jpZVxuIgorCisjfiBtc2dpZCAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgICAgIG51bWJlciBvZiBDUFUgd2hlcmUgY3B1ZnJlcSBzZXR0aW5ncyBzaGFsbCBiZSAiCisjfiAibW9kaWZpZWRcbiIKKyN+IG1zZ3N0ciAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgICAgIG51belybyBkdSBDUFUg4CBwcmVuZHJlIGVuIGNvbXB0ZSBwb3VyIGxlc1xuIgorI34gIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZW1lbnRzXG4iCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9wby9pdC5wbyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2l0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MGM0ZGQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9wby9pdC5wbwpAQCAtMCwwICsxLDk2MSBAQAorIyBJdGFsaWFuIHRyYW5zbGF0aW9ucyBmb3IgY3B1ZnJlcXV0aWxzIHBhY2thZ2UKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGNwdWZyZXF1dGlscyBwYWNrYWdlLgorIyBNYXR0aWEgRG9uZ2lsaSA8bWFsYXR0aWFAZ21haWwuY29tPi4KKyMKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGNwdWZyZXF1dGlscyAwLjNcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDMtMDggMTc6MDMrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMDgtMTUgMTI6MDArMDkwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTWF0dGlhIERvbmdpbGkgPG1hbGF0dGlhQGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBOT05FXG4iCisiTGFuZ3VhZ2U6IFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzozNgorbXNnaWQgIlByb2Nlc3NvciBDb3JlIEMzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjQzCittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTEKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo1OCB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzAKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzozMworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM3IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzIiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6NDcKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NTYKK21zZ2lkICJQYWNrYWdlIGluIHNsZWVwIHN0YXRlIChQQzEgb3IgZGVlcGVyKSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NjMKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzcKK21zZ2lkICJOb3J0aCBCcmlkZ2UgUDEgYm9vbGVhbiBjb3VudGVyIChyZXR1cm5zIDAgb3IgMSkiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzozNQorbXNnaWQgIlByb2Nlc3NvciBDb3JlIG5vdCBpZGxlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NDIKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBpbiBhbiBpZGxlIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NTAKK21zZ2lkICJBdmVyYWdlIEZyZXF1ZW5jeSAoaW5jbHVkaW5nIGJvb3N0KSBpbiBNSHoiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy1oXSBbIFstdF0gfCBbLWxdIHwgWy1tIDxtb24xPixbPG1vbjI+XSBdIF0gWy1pICIKKyJpbnRlcnZhbF9zZWMgfCAtYyBjb21tYW5kIC4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjcHVwb3dlciBtb25pdG9yOiBbLXZdIFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtdjogYmUgbW9yZSB2ZXJib3NlXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaDogcHJpbnQgdGhpcyBoZWxwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaTogdGltZSBpbnRlcnZhbGwgdG8gbWVhc3VyZSBmb3IgaW4gc2Vjb25kcyAoZGVmYXVsdCAxKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXQ6IHNob3cgQ1BVIHRvcG9sb2d5L2hpZXJhcmNoeVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWw6IGxpc3QgYXZhaWxhYmxlIENQVSBzbGVlcCBtb25pdG9ycyAoZm9yIHVzZSB3aXRoIC1tKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLW06IHNob3cgc3BlY2lmaWMgQ1BVIHNsZWVwIG1vbml0b3JzIG9ubHkgKGluIHNhbWUgb3JkZXIpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib25seSBvbmUgb2Y6IC10LCAtbCwgLW0gYXJlIGFsbG93ZWRcbiIKKyJJZiBub25lIG9mIHRoZW0gaXMgcGFzc2VkLCIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbGwgc3VwcG9ydGVkIG1vbml0b3JzIGFyZSBzaG93blxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgJXMsIENvdW50ZXIgJXMgaGFzIG5vIGNvdW50IGZ1bmN0aW9uLiBJbXBsZW1lbnRhdGlvbiBlcnJvclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqaXMgb2ZmbGluZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtYXggbW9uaXRvciBuYW1lIGxlbmd0aCAoJWQpIGV4Y2VlZGVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWF0Y2hpbmcgbW9uaXRvciBmb3VuZCBpbiAlcywgdHJ5IC1sIG9wdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgXCIlc1wiICglZCBzdGF0ZXMpIC0gTWlnaHQgb3ZlcmZsb3cgYWZ0ZXIgJXUgc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRvb2sgJS41ZiBzZWNvbmRzIGFuZCBleGl0ZWQgd2l0aCBzdGF0dXMgJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVhZCBudW1iZXIgb2YgYXZhaWxhYmxlIHByb2Nlc3NvcnNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgbW9uaXRvciAlcyBuZWVkcyByb290IGFjY2Vzc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIEhXIENzdGF0ZSBtb25pdG9ycyBmb3VuZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3B1cG93ZXIgWyAtYyBjcHVsaXN0IF0gc3ViY29tbWFuZCBbQVJHU11cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIC0tdmVyc2lvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydGVkIHN1YmNvbW1hbmRzIGFyZTpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTb21lIHN1YmNvbW1hbmRzIGNhbiBtYWtlIHVzZSBvZiB0aGUgLWMgY3B1bGlzdCBvcHRpb24uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29rIGF0IHRoZSBnZW5lcmFsIGNwdXBvd2VyIG1hbnBhZ2UgaG93IHRvIHVzZSBpdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5kIHJlYWQgdXAgdGhlIHN1YmNvbW1hbmQncyBtYW5wYWdlIHdoZXRoZXIgaXQgaXMgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlVzZSBjcHVwb3dlciBoZWxwIHN1YmNvbW1hbmQgZm9yIGdldHRpbmcgaGVscCBmb3IgYWJvdmUgc3ViY29tbWFuZHMuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgZXJyb3JzIGFuZCBidWdzIHRvICVzLCBwbGVhc2UuXG4iCittc2dzdHIgIlBlciBmYXZvcmUsIGNvbXVuaWNhcmUgZXJyb3JpIGUgbWFsZnVuemlvbmFtZW50aSBhICVzLlxuIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBwYXJzaW5nIGNwdSBsaXN0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3ViY29tbWFuZCAlcyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzozMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjb3VudCB0aGUgbnVtYmVyIG9mIENQVXMgKCVzOiAlcyksIGFzc3VtaW5nIDFcbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZGV0ZXJtaW5hcmUgaWwgbnVtZXJvIGRpIENQVSAoJXM6ICVzKSwgYXNzdW1vIHNpYSAxXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgICAgICAgICAgbWluaW11bSBDUFUgZnJlcXVlbmN5ICAtICBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIC0gIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKyIgICAgICAgICAgZnJlcXVlbnphIG1pbmltYSBDUFUgICAtICBmcmVxdWVuemEgbWFzc2ltYSBDUFUgIC0gIGdlc3RvcmVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdoaWxlIGV2YWx1YXRpbmcgQm9vc3QgQ2FwYWJpbGl0aWVzIG9uIENQVSAlZCAtLSBhcmUgeW91IHJvb3Q/XG4iCittc2dzdHIgIiIKKworIy4gUCBzdGF0ZSBjaGFuZ2VzIHZpYSBNU1IgYXJlIGlkZW50aWZpZWQgdmlhIGNwdWlkIDgwMDAwMDA3CisjLiBvbiBJbnRlbCBhbmQgQU1ELCBidXQgd2UgYXNzdW1lIGJvb3N0IGNhcGFibGUgbWFjaGluZXMgY2FuIGRvIHRoYXQKKyMuIGlmIChjcHVpZF9lYXgoMHg4MDAwMDAwMCkgPj0gMHg4MDAwMDAwNworIy4gJiYgKGNwdWlkX2VkeCgweDgwMDAwMDA3KSAmICgxIDw8IDcpKSkKKyMuCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBib29zdCBzdGF0ZSBzdXBwb3J0OiBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFN1cHBvcnRlZDogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMgdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0Cittc2dpZCAieWVzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MyB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKK21zZ2lkICJubyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgICBBY3RpdmU6ICVzXG4iCittc2dzdHIgIiAgbW9kdWxvICVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQm9vc3QgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgVG90YWwgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgUHN0YXRlLVBiJWQ6ICVsdU1IeiAoYm9vc3Qgc3RhdGUpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBQc3RhdGUtUCVkOiAgJWx1TUh6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgbm8gb3IgdW5rbm93biBjcHVmcmVxIGRyaXZlciBpcyBhY3RpdmUgb24gdGhpcyBDUFVcbiIKK21zZ3N0ciAiICBuZXNzdW4gbW9kdWxvIG8gbW9kdWxvIGNwdWZyZXEgc2Nvbm9zY2l1dG8gcGVyIHF1ZXN0YSBDUFVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIG1vZHVsbyAlc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBDUFVzIHdoaWNoIHJ1biBhdCB0aGUgc2FtZSBoYXJkd2FyZSBmcmVxdWVuY3k6ICIKK21zZ3N0ciAiICBDUFUgY2hlIG9wZXJhbm8gYWxsYSBzdGVzc2EgZnJlcXVlbnphIGhhcmR3YXJlOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIzMAorIywgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeSBjb29yZGluYXRlZCBieSBzb2Z0d2FyZTogIgorbXNnc3RyICIgIENQVSBjaGUgw6ggbmVjZXNzYXJpbyBzaWFubyBjb29yZGluYXRlIGRhbCBzb2Z0d2FyZTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBtYXhpbXVtIHRyYW5zaXRpb24gbGF0ZW5jeTogIgorbXNnc3RyICIgIGxhdGVuemEgbWFzc2ltYSBkdXJhbnRlIGxhIHRyYW5zaXppb25lOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI0NworIywgYy1mb3JtYXQKK21zZ2lkICIgIGhhcmR3YXJlIGxpbWl0czogIgorbXNnc3RyICIgIGxpbWl0aSBoYXJkd2FyZTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBhdmFpbGFibGUgZnJlcXVlbmN5IHN0ZXBzOiAiCittc2dzdHIgIiAgZnJlcXVlbnplIGRpc3BvbmliaWxpOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICIgIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9yczogIgorbXNnc3RyICIgIGdlc3RvcmkgZGlzcG9uaWJpbGk6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3VycmVudCBwb2xpY3k6IGZyZXF1ZW5jeSBzaG91bGQgYmUgd2l0aGluICIKK21zZ3N0ciAiICBnZXN0b3JlIGF0dHVhbGU6IGxhIGZyZXF1ZW56YSBkZXZlIG1hbnRlbmVyc2kgdHJhICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbmQgIgorbXNnc3RyICIgZSAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGdvdmVybm9yIFwiJXNcIiBtYXkgZGVjaWRlIHdoaWNoIHNwZWVkIHRvIHVzZVxuIgorIiAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGlzIHJhbmdlLlxuIgorbXNnc3RyICIiCisiIElsIGdlc3RvcmUgXCIlc1wiIHB1w7IgZGVjaWRlcmUgcXVhbGUgdmVsb2NpdMOgIHVzYXJlXG4iCisiICAgICAgICAgICAgICAgICAgaW4gcXVlc3RvIGludGVydmFsbG8uXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICIgIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSBpcyAiCittc2dzdHIgIiAgbGEgZnJlcXVlbnphIGF0dHVhbGUgZGVsbGEgQ1BVIMOoICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoYXNzZXJ0ZWQgYnkgY2FsbCB0byBoYXJkd2FyZSkiCittc2dzdHIgIiAob3R0ZW51dGEgZGEgdW5hIGNoaWFtYXRhIGRpcmV0dGEgYWxsJ2hhcmR3YXJlKSIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3B1ZnJlcSBzdGF0czogIgorbXNnc3RyICIgc3RhdGlzdGljaGUgY3B1ZnJlcToiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGZyZXFpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJVc286IGNwdWZyZXEtaW5mbyBbb3B6aW9uaV1cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDczIHV0aWxzL2NwdWZyZXEtc2V0LmM6MjYgdXRpbHMvY3B1cG93ZXItc2V0LmM6MjMKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uczpcbiIKK21zZ3N0ciAiT3B6aW9uaTpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1lLCAtLWRlYnVnICAgICAgICAgIFByaW50cyBvdXQgZGVidWcgaW5mb3JtYXRpb24gW2RlZmF1bHRdXG4iCittc2dzdHIgIiAgLWUsIC0tZGVidWcgICAgICAgICAgTW9zdHJhIGluZm9ybWF6aW9uaSBkaSBkZWJ1Z1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYsIC0tZnJlcSAgICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBhY2NvcmRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBjcHVmcmVxIGNvcmUgKlxuIgorbXNnc3RyICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBNb3N0cmEgbGEgZnJlcXVlbnphIGF0dHVhbGUgZGVsbGEgQ1BVIHNlY29uZG9cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGlsIG1vZHVsbyBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC13LCAtLWh3ZnJlcSAgICAgICAgIEdldCBmcmVxdWVuY3kgdGhlIENQVSBjdXJyZW50bHkgcnVucyBhdCwgYnkgcmVhZGluZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaXQgZnJvbSBoYXJkd2FyZSAob25seSBhdmFpbGFibGUgdG8gcm9vdCkgKlxuIgorbXNnc3RyICIiCisiICAtdywgLS1od2ZyZXEgICAgICAgICBNb3N0cmEgbGEgZnJlcXVlbnphIGF0dHVhbGUgZGVsbGEgQ1BVIGxlZ2dlbmRvbGFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGRhbGwnaGFyZHdhcmUgKGRpc3BvbmliaWxlIHNvbG8gcGVyIGwndXRlbnRlIHJvb3QpICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIERldGVybWluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICIKKyJhbGxvd2VkICpcbiIKK21zZ3N0ciAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgRGV0ZXJtaW5hIGxlIGZyZXF1ZW56ZSBtaW5pbWEgZSBtYXNzaW1hIHBvc3NpYmlsaSBwZXIgIgorImxhIENQVSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1kLCAtLWRyaXZlciAgICAgICAgIERldGVybWluZXMgdGhlIHVzZWQgY3B1ZnJlcSBrZXJuZWwgZHJpdmVyICpcbiIKK21zZ3N0ciAiIgorIiAgLWQsIC0tZHJpdmVyICAgICAgICAgRGV0ZXJtaW5hIGlsIG1vZHVsbyBjcHVmcmVxIGRlbCBrZXJuZWwgaW4gdXNvICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgR2V0cyB0aGUgY3VycmVudGx5IHVzZWQgY3B1ZnJlcSBwb2xpY3kgKlxuIgorbXNnc3RyICIiCisiICAtcCwgLS1wb2xpY3kgICAgICAgICBNb3N0cmEgaWwgZ2VzdG9yZSBjcHVmcmVxIGF0dHVhbG1lbnRlIGluIHVzbyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1nLCAtLWdvdmVybm9ycyAgICAgIERldGVybWluZXMgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzICpcbiIKK21zZ3N0ciAiICAtZywgLS1nb3Zlcm5vcnMgICAgICBEZXRlcm1pbmEgaSBnZXN0b3JpIGNwdWZyZXEgZGlzcG9uaWJpbGkgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXIsIC0tcmVsYXRlZC1jcHVzICAgRGV0ZXJtaW5lcyB3aGljaCBDUFVzIHJ1biBhdCB0aGUgc2FtZSBoYXJkd2FyZSAiCisiZnJlcXVlbmN5ICpcbiIKK21zZ3N0ciAiIgorIiAgLXIsIC0tcmVsYXRlZC1jcHVzICAgRGV0ZXJtaW5hIHF1YWxpIENQVSBvcGVyYW5vIGFsbGEgc3Rlc3NhIGZyZXF1ZW56YSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmUgKlxuIgorbXNnc3RyICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBEZXRlcm1pbmEgcXVhbGkgQ1BVIGRldm9ubyBhdmVyZSBsYSBmcmVxdWVuemFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGEgZGFsIHNvZnR3YXJlICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc3RhdHMgICAgICAgICAgU2hvd3MgY3B1ZnJlcSBzdGF0aXN0aWNzIGlmIGF2YWlsYWJsZVxuIgorbXNnc3RyICIgIC1zLCAtLXN0YXRzICAgICAgICAgIE1vc3RyYSBsZSBzdGF0aXN0aWNoZSBzZSBkaXNwb25pYmlsaVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXksIC0tbGF0ZW5jeSAgICAgICAgRGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBsYXRlbmN5IG9uIENQVSBmcmVxdWVuY3kgIgorImNoYW5nZXMgKlxuIgorbXNnc3RyICIiCisiICAteSwgLS1sYXRlbmN5ICAgICAgICBEZXRlcm1pbmEgbGEgbGF0ZW56YSBtYXNzaW1hIGR1cmFudGUgaSBjYW1iaSBkaSAiCisiZnJlcXVlbnphICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWIsIC0tYm9vc3QgICAgICAgICAgQ2hlY2tzIGZvciB0dXJibyBvciBib29zdCBtb2RlcyAgKlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jLyIKKyJjcHVmcmVxXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gMi40LiBhbmQgZWFybHkgMi42LiBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFN0YW1wYSBsZSBpbmZvcm1hemlvbmkgY29tZSBzZSBwcm92ZW5pc3Nlcm8gZGFsbGFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjY2lhIGNwdWZyZXEgL3Byb2MvIHByZXNlbnRlIG5laSBrZXJuZWxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIDIuNCBlZCBpIHByaW1pIDIuNlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgaHVtYW4tcmVhZGFibGUgb3V0cHV0IGZvciB0aGUgLWYsIC13LCAtcyBhbmQgLXkgIgorInBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgZm9ybWF0dGEgbCdvdXRwdXQgZGVsbGUgb3B6aW9uaSAtZiwgLXcsIC1zIGUgLXkgaW4gIgorIm1hbmllcmFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGxlZ2dpYmlsZSBkYSB1biBlc3NlcmUgdW1hbm9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiICAtaCwgLS1oZWxwICAgICAgICAgICBTdGFtcGEgcXVlc3RhIHNjaGVybWF0YVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIG5vIGFyZ3VtZW50IG9yIG9ubHkgdGhlIC1jLCAtLWNwdSBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGRlYnVnIG91dHB1dCBhYm91dFxuIgorImNwdWZyZXEgaXMgcHJpbnRlZCB3aGljaCBpcyB1c2VmdWwgZS5nLiBmb3IgcmVwb3J0aW5nIGJ1Z3MuXG4iCittc2dzdHIgIiIKKyJTZSBub24gdmllbmUgc3BlY2lmaWNhdGEgbmVzc3VuYSBvcHppb25lIG8gdmllbmUgc3BlY2lmaWNhdGEgc29sbyBsJ29wemlvbmUgLSIKKyJjLCAtLWNwdSxcbiIKKyJsZSBpbmZvcm1hemlvbmkgZGkgZGVidWcgcGVyIGNwdWZyZXEgc2FyYW5ubyB1dGlsaSBhZCBlc2VtcGlvIGEgcmlwb3J0YXJlIGkgIgorImJ1Zy5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3IgdGhlIGFyZ3VtZW50cyBtYXJrZWQgd2l0aCAqLCBvbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXNcbiIKKyJlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gemVyb1xuIgorbXNnc3RyICIiCisiUGVyIGxlIG9wemlvbmkgc2VnbmFsYXRlIGNvbiAqLCBvbWV0dGVyZSBsJ29wemlvbmUgLWMgbyAtLWNwdSDDqCBjb21lICIKKyJzcGVjaWZpY2FybGFcbiIKKyJjb24gaWwgdmFsb3JlIDBcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgdG9vbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHBhc3NpbmcgYSAtLWNwdSAiCisiYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIkwnb3B6aW9uZSBzcGVjaWZpY2F0YSBhIHF1ZXN0byBwcm9ncmFtbWEgbm9uIHB1w7IgZXNzZXJlIGNvbWJpbmF0YSBjb24gLS1jcHVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIC0tY3B1IHBhcmFtZXRlciBhbmQvb3JcbiIKKyJtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIgorbXNnc3RyICIiCisiTm9uIMOoIHBvc3NpYmlsZSBzcGVjaWZpY2FyZSBwacO5IGRpIHVuYSB2b2x0YSBsJ29wemlvbmUgLS1jcHUgZS9vXG4iCisic3BlY2lmaWNhcmUgcGnDuSBkaSB1biBwYXJhbWV0cm8gZGkgb3V0cHV0IHNwZWNpZmljb1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MDAgdXRpbHMvY3B1ZnJlcS1zZXQuYzo4MiB1dGlscy9jcHVwb3dlci1zZXQuYzo0MgorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjQyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIKK21zZ3N0ciAib3B6aW9uZSBzY29ub3NjaXV0YSBvIG5vbiB2YWxpZGFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGFuYWx5emUgQ1BVICVkIGFzIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBwcmVzZW50XG4iCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgbGEgQ1BVICVkIHBvaWNow6kgbm9uIHNlbWJyYSBlc3NlcmUgcHJlc2VudGVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjIwIHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbGlzaSBkZWxsYSBDUFUgJWQ6XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxdWVuY3ktc2V0IFtvcHRpb25zXVxuIgorbXNnc3RyICJVc286IGNwdWZyZXEtc2V0IFtvcHppb25pXVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1kIEZSRVEsIC0tbWluIEZSRVEgICAgICBuZXcgbWluaW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgIgorInNlbGVjdFxuIgorbXNnc3RyICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbGEgbnVvdmEgZnJlcXVlbnphIG1pbmltYSBjaGUgaWwgZ2VzdG9yZSBjcHVmcmVxICIKKyJwdcOyIHNjZWdsaWVyZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBuZXcgbWF4aW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgIgorInNlbGVjdFxuIgorbXNnc3RyICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgbGEgbnVvdmEgZnJlcXVlbnphIG1hc3NpbWEgY2hlIGlsIGdlc3RvcmUgY3B1ZnJlcSAiCisicHXDsiBzY2VnbGllcmVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1nIEdPViwgLS1nb3Zlcm5vciBHT1YgICBuZXcgY3B1ZnJlcSBnb3Zlcm5vclxuIgorbXNnc3RyICIgIC1nIEdPViwgLS1nb3Zlcm5vciBHT1YgICBudW92byBnZXN0b3JlIGNwdWZyZXFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiBGUkVRLCAtLWZyZXEgRlJFUSAgICAgc3BlY2lmaWMgZnJlcXVlbmN5IHRvIGJlIHNldC4gUmVxdWlyZXMgdXNlcnNwYWNlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgZ292ZXJub3IgdG8gYmUgYXZhaWxhYmxlIGFuZCBsb2FkZWRcbiIKK21zZ3N0ciAiIgorIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIHNwZWNpZmljYSBsYSBmcmVxdWVuemEgYSBjdWkgaW1wb3N0YXJlIGxhIENQVS5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICDDiCBuZWNlc3NhcmlvIGNoZSBpbCBnZXN0b3JlIHVzZXJzcGFjZSBzaWEgIgorImRpc3BvbmliaWxlIGUgY2FyaWNhdG9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1yLCAtLXJlbGF0ZWQgICAgICAgICAgICBTd2l0Y2hlcyBhbGwgaGFyZHdhcmUtcmVsYXRlZCBDUFVzXG4iCittc2dzdHIgIiIKKyIgIC1yLCAtLXJlbGF0ZWQgICAgICAgICAgICBNb2RpZmljYSB0dXR0ZSBsZSBDUFUgY29vcmRpbmF0ZSBkYWxsJ2hhcmR3YXJlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzMgdXRpbHMvY3B1cG93ZXItc2V0LmM6MjggdXRpbHMvY3B1cG93ZXItaW5mby5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgU3RhbXBhIHF1ZXN0YSBzY2hlcm1hdGFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGVzOlxuIgorIjEuIE9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gXCJhbGxcIlxuIgorbXNnc3RyICIiCisiUGVyIGxlIG9wemlvbmkgc2VnbmFsYXRlIGNvbiAqLCBvbWV0dGVyZSBsJ29wemlvbmUgLWMgbyAtLWNwdSDDqCBjb21lICIKKyJzcGVjaWZpY2FybGFcbiIKKyJjb24gaWwgdmFsb3JlIDBcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIjIuIFRoZSAtZiBGUkVRLCAtLWZyZXEgRlJFUSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyICIKKyJwYXJhbWV0ZXJcbiIKKyIgICBleGNlcHQgdGhlIC1jIENQVSwgLS1jcHUgQ1BVIHBhcmFtZXRlclxuIgorIjMuIEZSRVF1ZW5jaWVzIGNhbiBiZSBwYXNzZWQgaW4gSHosIGtIeiAoZGVmYXVsdCksIE1IeiwgR0h6LCBvciBUSHpcbiIKKyIgICBieSBwb3N0Zml4aW5nIHRoZSB2YWx1ZSB3aXRoIHRoZSB3YW50ZWQgdW5pdCBuYW1lLCB3aXRob3V0IGFueSBzcGFjZVxuIgorIiAgIChGUkVRdWVuY3kgaW4ga0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS5cbiIKK21zZ3N0ciAiIgorIk5vdGU6XG4iCisiMS4gT21ldHRlcmUgbCdvcHppb25lIC1jIG8gLS1jcHUgw6ggZXF1aXZhbGVudGUgYSBpbXBvc3RhcmxvIGEgMFxuIgorIjIuIGwnb3B6aW9uZSAtZiBGUkVRLCAtLWZyZXEgRlJFUSBub24gcHXDsiBlc3NlcmUgc3BlY2lmaWNhdGEgY29uIGFsdHJlICIKKyJvcHppb25pXG4iCisiICAgYWQgZWNjZXppb25lIGRlbGwnb3B6aW9uZSAtYyBDUFUgbyAtLWNwdSBDUFVcbiIKKyIzLiBsZSBGUkVRdWVuemUgcG9zc29ubyBlc3NlcmUgc3BlY3VmaWNhdGUgaW4gIEh6LCBrSHogKGRlZmF1bHQpLCBNSHosIEdIeiwgIgorIm9yIFRIelxuIgorIiAgIHBvc3Rwb25lbmRvIGwndW5pdMOgIGRpIG1pc3VyYSBhbCB2YWxvcmUgc2VuemEgbmVzc3VubyBzcGF6aW8gZnJhIGxvcm9cbiIKKyIgICAoRlJFUXVlbnphIGluIGtIeiA9XiBIeiAqIDAuMDAxID1eIE1IeiAqIDEwMDAgPV4gR0h6ICogMTAwMDAwMCkuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIHNldHRpbmcgbmV3IHZhbHVlcy4gQ29tbW9uIGVycm9yczpcbiIKKyItIERvIHlvdSBoYXZlIHByb3BlciBhZG1pbmlzdHJhdGlvbiByaWdodHM/IChzdXBlci11c2VyPylcbiIKKyItIElzIHRoZSBnb3Zlcm5vciB5b3UgcmVxdWVzdGVkIGF2YWlsYWJsZSBhbmQgbW9kcHJvYmVkP1xuIgorIi0gVHJ5aW5nIHRvIHNldCBhbiBpbnZhbGlkIHBvbGljeT9cbiIKKyItIFRyeWluZyB0byBzZXQgYSBzcGVjaWZpYyBmcmVxdWVuY3ksIGJ1dCB1c2Vyc3BhY2UgZ292ZXJub3IgaXMgbm90ICIKKyJhdmFpbGFibGUsXG4iCisiICAgZm9yIGV4YW1wbGUgYmVjYXVzZSBvZiBoYXJkd2FyZSB3aGljaCBjYW5ub3QgYmUgc2V0IHRvIGEgc3BlY2lmaWMgIgorImZyZXF1ZW5jeVxuIgorIiAgIG9yIGJlY2F1c2UgdGhlIHVzZXJzcGFjZSBnb3Zlcm5vciBpc24ndCBsb2FkZWQ/XG4iCittc2dzdHIgIiIKKyJTaSBzb25vIHZlcmlmaWNhdGkgZGVnbGkgZXJyb3JpIGltcG9zdGFuZG8gaSBudW92aSB2YWxvcmkuXG4iCisiQWxjdW5pIGVycm9yaSBjb211bmkgcG9zc29ubyBlc3NlcmU6XG4iCisiLSBIYWkgaSBuZWNlc3NhcmkgZGlyaXR0aSBkaSBhbW1pbmlzdHJhemlvbmU/IChzdXBlci11c2VyPylcbiIKKyItIElsIGdlc3RvcmUgY2hlIGhhaSByaWNoaWVzdG8gw6ggZGlzcG9uaWJpbGUgZSBjYXJpY2F0bz9cbiIKKyItIFN0YWkgcHJvdmFuZG8gYWQgaW1wb3N0YXJlIHVuYSBwb2xpdGljYSBkaSBnZXN0aW9uZSBub24gdmFsaWRhP1xuIgorIi0gU3RhaSBwcm92YW5kbyBhIGltcG9zdGFyZSB1bmEgc3BlY2lmaWNhIGZyZXF1ZW56YSBtYSBpbCBnZXN0b3JlXG4iCisiICB1c2Vyc3BhY2Ugbm9uIMOoIGRpc3BvbmliaWxlLCBwZXIgZXNlbXBpbyBhIGNhdXNhIGRlbGwnaGFyZHdhcmVcbiIKKyIgIGNoZSBub24gc3VwcG9ydGEgZnJlcXVlbnplIGZpc3NlIG8gYSBjYXVzYSBkZWwgZmF0dG8gY2hlXG4iCisiICBpbCBnZXN0b3JlIHVzZXJzcGFjZSBub24gw6ggY2FyaWNhdG8/XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nLCB1bmtub3duIG9yIHVuaGFuZGxlZCBDUFU/XG4iCittc2dzdHIgIkNQVSBlcnJhdGEsIHNjb25vc2NpdXRhIG8gbm9uIGdlc3RpdGE/XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgLWYvLS1mcmVxIHBhcmFtZXRlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtZC8tLW1pbiwgLXUvLS1tYXggb3JcbiIKKyItZy8tLWdvdmVybm9yIHBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorImwnb3B6aW9uZSAtZi8tLWZyZXEgbm9uIHB1w7IgdmVuaXJlIGNvbWJpbmF0YSBjb24gaSBwYXJhbWV0cmlcbiIKKyIgLWQvLS1taW4sIC11Ly0tbWF4IG8gLWcvLS1nb3Zlcm5vclxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXQgbGVhc3Qgb25lIHBhcmFtZXRlciBvdXQgb2YgLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXgsIGFuZFxuIgorIi1nLy0tZ292ZXJub3IgbXVzdCBiZSBwYXNzZWRcbiIKK21zZ3N0ciAiIgorIkFsbWVubyB1bmEgZGVsbGUgb3B6aW9uaSAtZi8tLWZyZXEsIC1kLy0tbWluLCAtdS8tLW1heCwgZSAtZy8tLWdvdmVybm9yXG4iCisiZGV2ZSBlc3NlcmUgc3BlY2lmaWNhdGFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjcHU6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIHNldCBbIC1iIHZhbCBdIFsgLW0gdmFsIF0gWyAtcyB2YWwgXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyBbVkFMXSAgICBTZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbSwgLS1zY2hlZC1tYyAgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1zLCAtLXNjaGVkLXNtdCBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgIgorInBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICItLXBlcmYtYmlhcyBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zY2hlZC1tYyBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtc210IHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1tYyAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHNjaGVkLXNtdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHBlcmYtYmlhcyB2YWx1ZSBvbiBDUFUgJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGluZm8gWyAtYiBdIFsgLW0gXSBbIC1zIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWIsIC0tcGVyZi1iaWFzICAgIEdldHMgQ1BVJ3MgcG93ZXIgdnMgcGVyZm9ybWFuY2UgcG9saWN5IG9uIHNvbWVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbCBtb2RlbHMgWzAtMTVdLCBzZWUgbWFucGFnZSBmb3IgZGV0YWlsc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtbSwgLS1zY2hlZC1tYyAgICAgR2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisiICAtcCwgLS1wb2xpY3kgICAgICAgICBNb3N0cmEgaWwgZ2VzdG9yZSBjcHVmcmVxIGF0dHVhbG1lbnRlIGluIHVzbyAqXG4iCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtcywgLS1zY2hlZC1zbXQgICAgR2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBhc3Npbmcgbm8gb3B0aW9uIHdpbGwgc2hvdyBhbGwgaW5mbywgYnkgZGVmYXVsdCBvbmx5IG9uIGNvcmUgMFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgc2V0dGluZzogIgorbXNnc3RyICIiCisKKyMuIGlmIHN5c2ZzIGZpbGUgaXMgbWlzc2luZyBpdCdzOiBlcnJubyA9PSBFTk9FTlQKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMDUgdXRpbHMvY3B1cG93ZXItaW5mby5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0ncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgc2V0dGluZzogIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWwncyBwZXJmb3JtYW5jZSBiaWFzIHNldHRpbmcgbmVlZHMgcm9vdCBwcml2aWxlZ2VzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBJbnRlbCdzIHBlcmZvcm1hbmNlIGJpYXMgc2V0dGluZ1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgcGVyZi1iaWFzIHZhbHVlXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwZXJmLWJpYXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkFuYWx5emluZyBDUFUgJWQ6XG4iCittc2dzdHIgImFuYWxpc2kgZGVsbGEgQ1BVICVkOlxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IE5vIGlkbGUgc3RhdGVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBDYW4ndCByZWFkIGlkbGUgc3RhdGUgaW5mb1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgbWF4IGlkbGUgc3RhdGUgJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0NgorIywgYy1mb3JtYXQKK21zZ2lkICJOdW1iZXIgb2YgaWRsZSBzdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBpZGxlIHN0YXRlczoiCittc2dzdHIgIiAgZnJlcXVlbnplIGRpc3BvbmliaWxpOiAiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzL0Rlc2NyaXB0aW9uOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhdGVuY3k6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJEdXJhdGlvbjogJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBkcml2ZXJcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ1BVaWRsZSBkcml2ZXI6ICVzXG4iCittc2dzdHIgIiAgbW9kdWxvICVzXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJDUFVpZGxlIGdvdmVybm9yOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgQy1zdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIy4gcHJpbnRmKCJDc3RhdGVzOiAlZFxuIiwgY3N0YXRlcyk7CisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWN0aXZlIHN0YXRlOiAgICAgICAgICAgIEMwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1heF9jc3RhdGU6ICAgICAgICAgICAgICBDJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1heGltdW0gYWxsb3dlZCBsYXRlbmN5OiAlbHUgdXNlY1xuIgorbXNnc3RyICIgIGxhdGVuemEgbWFzc2ltYSBkdXJhbnRlIGxhIHRyYW5zaXppb25lOiAiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdGF0ZXM6XHRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIEMlZDogICAgICAgICAgICAgICAgICB0eXBlW0MlZF0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm9tb3Rpb25bLS1dIGRlbW90aW9uWy0tXSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImxhdGVuY3lbJTAzbHVdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2VbJTA4bHVdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVyYXRpb25bJTAyMEx1XSBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBpZGxlaW5mbyBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVXNvOiBjcHVmcmVxLWluZm8gW29wemlvbmldXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtcywgLS1zaWxlbnQgICAgICAgICBPbmx5IHNob3cgZ2VuZXJhbCBDLXN0YXRlIGluZm9ybWF0aW9uXG4iCittc2dzdHIgIiAgLWUsIC0tZGVidWcgICAgICAgICAgTW9zdHJhIGluZm9ybWF6aW9uaSBkaSBkZWJ1Z1xuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvIgorImFjcGkvcHJvY2Vzc29yLyovcG93ZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiBvbGRlciBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFN0YW1wYSBsZSBpbmZvcm1hemlvbmkgY29tZSBzZSBwcm92ZW5pc3Nlcm8gZGFsbGFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjY2lhIGNwdWZyZXEgL3Byb2MvIHByZXNlbnRlIG5laSBrZXJuZWxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIDIuNCBlZCBpIHByaW1pIDIuNlxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoyMDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJOb24gw6ggcG9zc2liaWxlIHNwZWNpZmljYXJlIHBpw7kgZGkgdW5hIHZvbHRhIGwnb3B6aW9uZSAtLWNwdSBlL29cbiIKKyJzcGVjaWZpY2FyZSBwacO5IGRpIHVuIHBhcmFtZXRybyBkaSBvdXRwdXQgc3BlY2lmaWNvXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICBDUFUgbnVtYmVyIHdoaWNoIGluZm9ybWF0aW9uIHNoYWxsIGJlIGRldGVybWluZWQgIgorI34gImFib3V0XG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgIE51bWVybyBkaSBDUFUgcGVyIGxhIHF1YWxlIG90dGVuZXJlIGxlICIKKyN+ICJpbmZvcm1hemlvbmlcbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBudW1iZXIgb2YgQ1BVIHdoZXJlIGNwdWZyZXEgc2V0dGluZ3Mgc2hhbGwgYmUgIgorI34gIm1vZGlmaWVkXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBudW1lcm8gZGkgQ1BVIHBlciBsYSBxdWFsZSBtb2RpZmljYXJlIGxlICIKKyN+ICJpbXBvc3RhemlvbmlcbiIKKworIywgZnV6enkKKyN+IG1zZ2lkICIgIENQVXMgd2hpY2ggY29vcmRpbmF0ZSBzb2Z0d2FyZSBmcmVxdWVuY3kgcmVxdWlyZW1lbnRzOiAiCisjfiBtc2dzdHIgIiIKKyN+ICIgIENQVSBwZXIgbGUgcXVhbGkgZWAgbmVjZXNzYXJpbyBjYW1iaWFyZSBsYSBmcmVxdWVuemEgIgorI34gImNvbnRlbXBvcmFuZWFtZW50ZTogIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vcHQucG8gYi90b29scy9wb3dlci9jcHVwb3dlci9wby9wdC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTBmNTI2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vcHQucG8KQEAgLTAsMCArMSw5NTcgQEAKKyMgQnJhemlsaWFuIFBvcnR1Z3Vlc2UgdHJhbnNsYXRpb25zIGZvciBjcHVmcmVxdXRpbHMgcGFja2FnZQorIyBDb3B5cmlnaHQgKEMpIDIwMDggVEhFIGNwdWZyZXF1dGlscydTIENPUFlSSUdIVCBIT0xERVIKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGNwdWZyZXF1dGlscyBwYWNrYWdlLgorIyBDbGF1ZGlvIEVkdWFyZG8gPGNsYXVkaW9lZGR5QGdtYWlsLmNvbT4sIDIwMDkuCisjCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBjcHVmcmVxdXRpbHMgMDA0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTAzLTA4IDE3OjAzKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTA2LTE0IDIyOjE2LTA0MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IENsYXVkaW8gRWR1YXJkbyA8Y2xhdWRpb2VkZHlAZ21haWwuY29tPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzozNgorbXNnaWQgIlByb2Nlc3NvciBDb3JlIEMzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjQzCittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTEKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo1OCB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzAKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzozMworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM3IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzIiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6NDcKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NTYKK21zZ2lkICJQYWNrYWdlIGluIHNsZWVwIHN0YXRlIChQQzEgb3IgZGVlcGVyKSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NjMKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmM6NzcKK21zZ2lkICJOb3J0aCBCcmlkZ2UgUDEgYm9vbGVhbiBjb3VudGVyIChyZXR1cm5zIDAgb3IgMSkiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzozNQorbXNnaWQgIlByb2Nlc3NvciBDb3JlIG5vdCBpZGxlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NDIKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBpbiBhbiBpZGxlIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6NTAKK21zZ2lkICJBdmVyYWdlIEZyZXF1ZW5jeSAoaW5jbHVkaW5nIGJvb3N0KSBpbiBNSHoiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy1oXSBbIFstdF0gfCBbLWxdIHwgWy1tIDxtb24xPixbPG1vbjI+XSBdIF0gWy1pICIKKyJpbnRlcnZhbF9zZWMgfCAtYyBjb21tYW5kIC4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjcHVwb3dlciBtb25pdG9yOiBbLXZdIFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtdjogYmUgbW9yZSB2ZXJib3NlXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaDogcHJpbnQgdGhpcyBoZWxwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtaTogdGltZSBpbnRlcnZhbGwgdG8gbWVhc3VyZSBmb3IgaW4gc2Vjb25kcyAoZGVmYXVsdCAxKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXQ6IHNob3cgQ1BVIHRvcG9sb2d5L2hpZXJhcmNoeVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWw6IGxpc3QgYXZhaWxhYmxlIENQVSBzbGVlcCBtb25pdG9ycyAoZm9yIHVzZSB3aXRoIC1tKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLW06IHNob3cgc3BlY2lmaWMgQ1BVIHNsZWVwIG1vbml0b3JzIG9ubHkgKGluIHNhbWUgb3JkZXIpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib25seSBvbmUgb2Y6IC10LCAtbCwgLW0gYXJlIGFsbG93ZWRcbiIKKyJJZiBub25lIG9mIHRoZW0gaXMgcGFzc2VkLCIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbGwgc3VwcG9ydGVkIG1vbml0b3JzIGFyZSBzaG93blxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgJXMsIENvdW50ZXIgJXMgaGFzIG5vIGNvdW50IGZ1bmN0aW9uLiBJbXBsZW1lbnRhdGlvbiBlcnJvclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqaXMgb2ZmbGluZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBtYXggbW9uaXRvciBuYW1lIGxlbmd0aCAoJWQpIGV4Y2VlZGVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWF0Y2hpbmcgbW9uaXRvciBmb3VuZCBpbiAlcywgdHJ5IC1sIG9wdGlvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1vbml0b3IgXCIlc1wiICglZCBzdGF0ZXMpIC0gTWlnaHQgb3ZlcmZsb3cgYWZ0ZXIgJXUgc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRvb2sgJS41ZiBzZWNvbmRzIGFuZCBleGl0ZWQgd2l0aCBzdGF0dXMgJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVhZCBudW1iZXIgb2YgYXZhaWxhYmxlIHByb2Nlc3NvcnNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgbW9uaXRvciAlcyBuZWVkcyByb290IGFjY2Vzc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDI4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIEhXIENzdGF0ZSBtb25pdG9ycyBmb3VuZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3B1cG93ZXIgWyAtYyBjcHVsaXN0IF0gc3ViY29tbWFuZCBbQVJHU11cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIC0tdmVyc2lvblxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3VwcG9ydGVkIHN1YmNvbW1hbmRzIGFyZTpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJTb21lIHN1YmNvbW1hbmRzIGNhbiBtYWtlIHVzZSBvZiB0aGUgLWMgY3B1bGlzdCBvcHRpb24uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJMb29rIGF0IHRoZSBnZW5lcmFsIGNwdXBvd2VyIG1hbnBhZ2UgaG93IHRvIHVzZSBpdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5kIHJlYWQgdXAgdGhlIHN1YmNvbW1hbmQncyBtYW5wYWdlIHdoZXRoZXIgaXQgaXMgc3VwcG9ydGVkLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlVzZSBjcHVwb3dlciBoZWxwIHN1YmNvbW1hbmQgZm9yIGdldHRpbmcgaGVscCBmb3IgYWJvdmUgc3ViY29tbWFuZHMuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICJSZXBvcnQgZXJyb3JzIGFuZCBidWdzIHRvICVzLCBwbGVhc2UuXG4iCittc2dzdHIgIlJlcG9ydGUgZXJyb3MgZSBidWdzIHBhcmEgJXMsIHBvciBmYXZvci5cbiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcGFyc2luZyBjcHUgbGlzdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1YmNvbW1hbmQgJXMgbmVlZHMgcm9vdCBwcml2aWxlZ2VzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY291bnQgdGhlIG51bWJlciBvZiBDUFVzICglczogJXMpLCBhc3N1bWluZyAxXG4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBjb250YXIgbyBuw7ptZXJvIGRlIENQVXMgKCVzOiAlcyksIGFzc3VtaW5kbyAxXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgICAgICAgICAgbWluaW11bSBDUFUgZnJlcXVlbmN5ICAtICBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIC0gIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKyIgICAgICAgICAgZnJlcXXDqm5jaWEgbcOtbmluYSBkbyBDUFUgIC0gIGZyZXF1w6puY2lhIG3DoXhpbWEgZG8gQ1BVICAtICAiCisicmVndWxhZG9yXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBldmFsdWF0aW5nIEJvb3N0IENhcGFiaWxpdGllcyBvbiBDUFUgJWQgLS0gYXJlIHlvdSByb290P1xuIgorbXNnc3RyICIiCisKKyMuIFAgc3RhdGUgY2hhbmdlcyB2aWEgTVNSIGFyZSBpZGVudGlmaWVkIHZpYSBjcHVpZCA4MDAwMDAwNworIy4gb24gSW50ZWwgYW5kIEFNRCwgYnV0IHdlIGFzc3VtZSBib29zdCBjYXBhYmxlIG1hY2hpbmVzIGNhbiBkbyB0aGF0CisjLiBpZiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID49IDB4ODAwMDAwMDcKKyMuICYmIChjcHVpZF9lZHgoMHg4MDAwMDAwNykgJiAoMSA8PCA3KSkpCisjLgorIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYm9vc3Qgc3RhdGUgc3VwcG9ydDogXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBTdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgInllcyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMgdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0Cittc2dpZCAibm8iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgICAgQWN0aXZlOiAlc1xuIgorbXNnc3RyICIgIGRyaXZlcjogJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBCb29zdCBTdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBUb3RhbCBTdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBQc3RhdGUtUGIlZDogJWx1TUh6IChib29zdCBzdGF0ZSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFBzdGF0ZS1QJWQ6ICAlbHVNSHpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBubyBvciB1bmtub3duIGNwdWZyZXEgZHJpdmVyIGlzIGFjdGl2ZSBvbiB0aGlzIENQVVxuIgorbXNnc3RyICIgIG5lbmh1bSBvdSBkcml2ZXIgZG8gY3B1ZnJlcSBkZWNvbmhlY2lkbyBlc3TDoSBhdGl2byBuZXNzZSBDUFVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIGRyaXZlcjogJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgQ1BVcyB3aGljaCBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgZnJlcXVlbmN5OiAiCittc2dzdHIgIiAgQ1BVcyBxdWUgcm9kYW0gbmEgbWVzbWEgZnJlcXXDqm5jaWEgZGUgaGFyZHdhcmU6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgQ1BVcyB3aGljaCBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5IGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlOiAiCittc2dzdHIgIiAgQ1BVcyBxdWUgcHJlY2lzYW0gdGVyIHN1YXMgZnJlcXXDqm5jaWFzIGNvb3JkZW5hZGFzIHBvciBzb2Z0d2FyZTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBtYXhpbXVtIHRyYW5zaXRpb24gbGF0ZW5jeTogIgorbXNnc3RyICIgIG1haW9yIGxhdMOqbmNpYSBkZSB0cmFuc2nDp8OjbzogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBoYXJkd2FyZSBsaW1pdHM6ICIKK21zZ3N0ciAiICBsaW1pdGVzIGRvIGhhcmR3YXJlOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIGF2YWlsYWJsZSBmcmVxdWVuY3kgc3RlcHM6ICIKK21zZ3N0ciAiICBuw612ZWlzIGRlIGZyZXF1w6puY2lhIGRpc3BvbsOtdmVpczogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnM6ICIKK21zZ3N0ciAiICByZWd1bGFkb3JlcyBkbyBjcHVmcmVxIGRpc3BvbsOtdmVpczogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IHBvbGljeTogZnJlcXVlbmN5IHNob3VsZCBiZSB3aXRoaW4gIgorbXNnc3RyICIgIHBvbMOtdGljYSBkZSBmcmVxdcOqbmNpYSBhdHVhbCBkZXZlIGVzdGFyIGVudHJlICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbmQgIgorbXNnc3RyICIgZSAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGdvdmVybm9yIFwiJXNcIiBtYXkgZGVjaWRlIHdoaWNoIHNwZWVkIHRvIHVzZVxuIgorIiAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGlzIHJhbmdlLlxuIgorbXNnc3RyICIiCisiTyByZWd1bGFkb3IgXCIlc1wiIGRldmUgZGVjaWRpciBxdWFsIHZlbG9jaWRhZGUgdXNhclxuIgorIiAgICAgICAgICAgICAgICAgIGRlbnRybyBkZXNzZSBsaW1pdGUuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5MworIywgYy1mb3JtYXQKK21zZ2lkICIgIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSBpcyAiCittc2dzdHIgIiAgZnJlcXXDqm5jaWEgYXR1YWwgZG8gQ1BVIMOpICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoYXNzZXJ0ZWQgYnkgY2FsbCB0byBoYXJkd2FyZSkiCittc2dzdHIgIiAoZGVjbGFyYWRvIHBvciBjaGFtYWRhIGFvIGhhcmR3YXJlKSIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3B1ZnJlcSBzdGF0czogIgorbXNnc3RyICIgIHN0YXR1cyBkbyBjcHVmcmVxOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGZyZXFpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJVc286IGNwdWZyZXEtaW5mbyBbb3DDp8O1ZXNdXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MyB1dGlscy9jcHVmcmVxLXNldC5jOjI2IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIzCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbnM6XG4iCittc2dzdHIgIk9ww6fDtWVzOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLWUsIC0tZGVidWcgICAgICAgICAgUHJpbnRzIG91dCBkZWJ1ZyBpbmZvcm1hdGlvbiBbZGVmYXVsdF1cbiIKK21zZ3N0ciAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBNb3N0cmEgaW5mb3JtYcOnw6NvIGRlIGRlYnVnXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGFjY29yZGluZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGNwdWZyZXEgY29yZSAqXG4iCittc2dzdHIgIiIKKyIgIC1mLCAtLWZyZXEgICAgICAgICAgIE9idGVtIGEgZnJlcXXDqm5jaWEgbmEgcXVhbCBvIENQVSByb2RhIG5vIG1vbWVudG8sIGRlICIKKyJhY29yZG9cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGNvbSBvIG7DumNsZW8gZG8gY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdywgLS1od2ZyZXEgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGJ5IHJlYWRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGl0IGZyb20gaGFyZHdhcmUgKG9ubHkgYXZhaWxhYmxlIHRvIHJvb3QpICpcbiIKK21zZ3N0ciAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgT2J0ZW0gYSBmcmVxdcOqbmNpYSBuYSBxdWFsIG8gQ1BVIGVzdMOhIG9wZXJhbmRvIG5vICIKKyJtb21lbnRvLFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgYXRyYXbDqXMgZGUgbGVpdHVyYSBubyBoYXJkd2FyZSAoZGlzcG9uw612ZWwgc29tZW50ZSAiCisicGFyYSByb290KSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBEZXRlcm1pbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSAiCisiYWxsb3dlZCAqXG4iCittc2dzdHIgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIERldGVybWluYSBhIGZyZXF1w6puY2lhIG3DrW5pbWEgZSBtw6F4aW1hIGRvIENQVSAiCisicGVybWl0aWRhICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWQsIC0tZHJpdmVyICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgdXNlZCBjcHVmcmVxIGtlcm5lbCBkcml2ZXIgKlxuIgorbXNnc3RyICIiCisiICAtZCwgIC0tZHJpdmVyICAgICAgICAgRGV0ZXJtaW5hIG8gZHJpdmVyIGRvIGtlcm5lbCBkbyBjcHVmcmVxIHVzYWRvICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgR2V0cyB0aGUgY3VycmVudGx5IHVzZWQgY3B1ZnJlcSBwb2xpY3kgKlxuIgorbXNnc3RyICIiCisiLS1wLCAtLXBvbGljeSAgICAgICAgIE9idGVtIGEgcG9sw610aWNhIGRvIGNwdWZyZXEgZW0gdXNvIG5vIG1vbWVudG8gKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZywgLS1nb3Zlcm5vcnMgICAgICBEZXRlcm1pbmVzIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9ycyAqXG4iCittc2dzdHIgIiIKKyIgIC1nLCAtLWdvdmVybm9ycyAgICAgIERldGVybWluYSByZWd1bGFkb3JlcyBkbyBjcHVmcmVxIGRpc3BvbsOtdmVpcyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtciwgLS1yZWxhdGVkLWNwdXMgICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlICIKKyJmcmVxdWVuY3kgKlxuIgorbXNnc3RyICIiCisiICAtciwgLS1yZWxhdGVkLWNwdXMgICBEZXRlcm1pbmEgcXVhaXMgQ1BVcyByb2RhbSBuYSBtZXNtYSBmcmVxdcOqbmNpYSBkZSAiCisiaGFyZHdhcmUgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgRGV0ZXJtaW5lcyB3aGljaCBDUFVzIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3lcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlICpcbiIKK21zZ3N0ciAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgRGV0ZXJtaW5hIHF1YWlzIENQVXMgcHJlY2lzYW0gdGVyIHN1YXMgZnJlcXXDqm5jaWFzXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBjb29yZGVuYWRhcyBwb3Igc29mdHdhcmUgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtcywgLS1zdGF0cyAgICAgICAgICBTaG93cyBjcHVmcmVxIHN0YXRpc3RpY3MgaWYgYXZhaWxhYmxlXG4iCittc2dzdHIgIiAgLXMsIC0tc3RhdHMgICAgICAgICAgTW9zdHJhIGVzdGF0w61zdGljYXMgZG8gY3B1ZnJlcSBzZSBkaXNwb27DrXZlaXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC15LCAtLWxhdGVuY3kgICAgICAgIERldGVybWluZXMgdGhlIG1heGltdW0gbGF0ZW5jeSBvbiBDUFUgZnJlcXVlbmN5ICIKKyJjaGFuZ2VzICpcbiIKK21zZ3N0ciAiIgorIiAgLXksIC0tbGF0ZW5jeSAgICAgICAgRGV0ZXJtaW5hIGEgbGF0w6puY2lhIG3DoXhpbWEgbmFzIHRyb2NhcyBkZSBmcmVxdcOqbmNpYSAiCisiZG8gQ1BVICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWIsIC0tYm9vc3QgICAgICAgICAgQ2hlY2tzIGZvciB0dXJibyBvciBib29zdCBtb2RlcyAgKlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jLyIKKyJjcHVmcmVxXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gMi40LiBhbmQgZWFybHkgMi42LiBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIE1vc3RyYSBpbmZvcm1hw6fDo28gZG8gdGlwbyBwcm92aWRhIHBlbGEgaW50ZXJmYWNlIC8iCisicHJvYy9jcHVmcmVxXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBlbSBrZXJuZWxzIDIuNC4gZSBtYWlzIHJlY2VudGVzIDIuNlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgaHVtYW4tcmVhZGFibGUgb3V0cHV0IGZvciB0aGUgLWYsIC13LCAtcyBhbmQgLXkgIgorInBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgc2HDrWRhIGxlZ8OtdmVsIHBhcmEgaHVtYW5vcyBwYXJhIG9zIHBhcsOibWV0cm9zIC1mLCAtdywgIgorIi1zIGUgLXlcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiIC1oLCAtLWhlbHAgICAgICAgICAgIEltcHJpbWUgZXNzYSB0ZWxhXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgbm8gYXJndW1lbnQgb3Igb25seSB0aGUgLWMsIC0tY3B1IHBhcmFtZXRlciBpcyBnaXZlbiwgZGVidWcgb3V0cHV0IGFib3V0XG4iCisiY3B1ZnJlcSBpcyBwcmludGVkIHdoaWNoIGlzIHVzZWZ1bCBlLmcuIGZvciByZXBvcnRpbmcgYnVncy5cbiIKK21zZ3N0ciAiIgorIlNlIG5lbmh1bSBhcmd1bWVudG8gb3Ugc29tZW50ZSBvIHBhcsOibWV0cm8gLWMsIC0tY3B1IMOpIGRhZG8sIGluZm9ybWHDp8OjbyBkZSAiCisiZGVidWcgc29icmVcbiIKKyJvIGNwdWZyZXEgw6kgbW9zdHJhZGEsIG8gcXVlIMOpIMO6dGlsIHBvciBleGVtcGxvIHBhcmEgcmVwb3J0YXIgYnVncy5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3IgdGhlIGFyZ3VtZW50cyBtYXJrZWQgd2l0aCAqLCBvbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXNcbiIKKyJlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gemVyb1xuIgorbXNnc3RyICIiCisiUGFyYSBvcyBhcmd1bWVudG9zIG1hcmNhZG9zIGNvbSAqLCBvbWl0aXIgbyBhcmd1bWVudG8gLWMgb3UgLS1jcHUgw6lcbiIKKyJlcXVpdmFsZW50ZSBhIHNldMOhLWxvIGNvbW8gemVyb1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyB0b29sIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcGFzc2luZyBhIC0tY3B1ICIKKyJhcmd1bWVudFxuIgorbXNnc3RyICIiCisiTyBhcmd1bWVudG8gdXNhZG8gcHJhIGVzc2EgZmVycmFtZW50YSBuw6NvIHBvZGUgc2VyIGNvbWJpbmFkbyBjb20gdW0gIgorImFyZ3VtZW50byAtLWNwdVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgLS1jcHUgcGFyYW1ldGVyIGFuZC9vclxuIgorIm1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJWb2PDqiBuw6NvIHBvZGUgZXNwZWNpZmljYXIgbWFpcyBkbyBxdWUgdW0gcGFyw6JtZXRybyAtLWNwdSBlL291XG4iCisibWFpcyBkbyBxdWUgdW0gYXJndW1lbnRvIGRlIHNhw61kYSBlc3BlY8OtZmljb1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MDAgdXRpbHMvY3B1ZnJlcS1zZXQuYzo4MiB1dGlscy9jcHVwb3dlci1zZXQuYzo0MgorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjQyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIKK21zZ3N0ciAiYXJndW1lbnRvIGludsOhbGlkbyBvdSBkZXNjb25oZWNpZG9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGFuYWx5emUgQ1BVICVkIGFzIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBwcmVzZW50XG4iCittc2dzdHIgIiIKKyJuw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgbyBDUFUgJSBqw6EgcXVlIG8gbWVzbW8gcGFyZWNlIG7Do28gZXN0YXIgcHJlc2VudGVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjIwIHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbGlzYW5kbyBvIENQVSAlZDpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGZyZXF1ZW5jeS1zZXQgW29wdGlvbnNdXG4iCittc2dzdHIgIlVzbzogY3B1ZnJlcS1zZXQgW29ww6fDtWVzXVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1kIEZSRVEsIC0tbWluIEZSRVEgICAgICBuZXcgbWluaW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgIgorInNlbGVjdFxuIgorbXNnc3RyICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbm92YSBmcmVxdcOqbmNpYSBtw61uaW1hIGRvIENQVSBxdWUgbyByZWd1bGFkb3IgIgorImRldmUgc2VsZWNpb25hclxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBuZXcgbWF4aW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgIgorInNlbGVjdFxuIgorbXNnc3RyICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgbm92YSBmcmVxdcOqbmNpYSBtw6F4aW1hIGRvIENQVSBxdWUgbyByZWd1bGFkb3IgIgorImRldmUgZXNjb2xoZXJcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1nIEdPViwgLS1nb3Zlcm5vciBHT1YgICBuZXcgY3B1ZnJlcSBnb3Zlcm5vclxuIgorbXNnc3RyICIgIC1nIEdPViwgLS1nb3Zlcm5vciBHT1YgICBub3ZvIHJlZ3VsYWRvciBkbyBjcHVmcmVxXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIHNwZWNpZmljIGZyZXF1ZW5jeSB0byBiZSBzZXQuIFJlcXVpcmVzIHVzZXJzcGFjZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdmVybm9yIHRvIGJlIGF2YWlsYWJsZSBhbmQgbG9hZGVkXG4iCittc2dzdHIgIiIKKyIgIC1mIEZSRVEsIC0tZnJlcSBGUkVRICAgICBmcmVxdcOqbmNpYSBlc3BlY8OtZmljYSBwYXJhIHNlciBzZXRhZGEuIE5lY2Vzc2l0YSAiCisicXVlIG8gcmVndWxhZG9yIGVtXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgbsOtdmVsIGRlIHVzdcOhcmlvIGVzdGVqYSBkaXNwb27DrXZlbCBlIGNhcnJlZ2Fkb1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXIsIC0tcmVsYXRlZCAgICAgICAgICAgIFN3aXRjaGVzIGFsbCBoYXJkd2FyZS1yZWxhdGVkIENQVXNcbiIKK21zZ3N0ciAiIgorIiAgLXIsIC0tcmVsYXRlZCAgICAgICAgICAgIE1vZGlmaWNhIHRvZG9zIG9zIENQVXMgcmVsYWNpb25hZG9zIGFvIGhhcmR3YXJlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzMgdXRpbHMvY3B1cG93ZXItc2V0LmM6MjggdXRpbHMvY3B1cG93ZXItaW5mby5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiIC1oLCAtLWhlbHAgICAgICAgICAgIE1vc3RyYSBlc3NhIHRlbGFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGVzOlxuIgorIjEuIE9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gXCJhbGxcIlxuIgorbXNnc3RyICIiCisiUGFyYSBvcyBhcmd1bWVudG9zIG1hcmNhZG9zIGNvbSAqLCBvbWl0aXIgbyBhcmd1bWVudG8gLWMgb3UgLS1jcHUgw6lcbiIKKyJlcXVpdmFsZW50ZSBhIHNldMOhLWxvIGNvbW8gemVyb1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiMi4gVGhlIC1mIEZSRVEsIC0tZnJlcSBGUkVRIHBhcmFtZXRlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgIgorInBhcmFtZXRlclxuIgorIiAgIGV4Y2VwdCB0aGUgLWMgQ1BVLCAtLWNwdSBDUFUgcGFyYW1ldGVyXG4iCisiMy4gRlJFUXVlbmNpZXMgY2FuIGJlIHBhc3NlZCBpbiBIeiwga0h6IChkZWZhdWx0KSwgTUh6LCBHSHosIG9yIFRIelxuIgorIiAgIGJ5IHBvc3RmaXhpbmcgdGhlIHZhbHVlIHdpdGggdGhlIHdhbnRlZCB1bml0IG5hbWUsIHdpdGhvdXQgYW55IHNwYWNlXG4iCisiICAgKEZSRVF1ZW5jeSBpbiBrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLlxuIgorbXNnc3RyICIiCisiTm90YXM6XG4iCisiMS4gT21pdGlyIG8gYXJndW1lbnRvIC1jIG9yIC0tY3B1IMOpIGVxdWl2YWxlbnRlIGEgc2V0w6EtbG8gY29tbyB6ZXJvXG4iCisiMi4gTyBwYXLDom1ldHJvIC1mIEZSRVEsIC0tZnJlcSBGUkVRIG7Do28gcG9kZSBzZXIgY29tYmluYWRvIGNvbSBxdWFscXVlciAiCisib3V0cm8gcGFyw6JtZXRyb1xuIgorIiAgIGV4Y2V0byBjb20gbyBwYXLDom1ldHJvIC1jIENQVSwgLS1jcHUgQ1BVXG4iCisiMy4gRlJFUXXDqm5jaWFzIHBvZGVtIHNlciB1c2FkYXMgZW0gSHosIGtIeiAocGFkcsOjbyksIE1IeiwgR0h6LCBvIFRIelxuIgorIiAgIGNvbG9jYW5kbyBvIG5vbWUgZGVzZWphZG8gZGEgdW5pZGFkZSBhcMOzcyBvIHZhbG9yLCBzZW0gcXVhbHF1ZXIgZXNwYcOnb1xuIgorIiAgIChGUkVRdcOqbmNpYSBlbSBrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBzZXR0aW5nIG5ldyB2YWx1ZXMuIENvbW1vbiBlcnJvcnM6XG4iCisiLSBEbyB5b3UgaGF2ZSBwcm9wZXIgYWRtaW5pc3RyYXRpb24gcmlnaHRzPyAoc3VwZXItdXNlcj8pXG4iCisiLSBJcyB0aGUgZ292ZXJub3IgeW91IHJlcXVlc3RlZCBhdmFpbGFibGUgYW5kIG1vZHByb2JlZD9cbiIKKyItIFRyeWluZyB0byBzZXQgYW4gaW52YWxpZCBwb2xpY3k/XG4iCisiLSBUcnlpbmcgdG8gc2V0IGEgc3BlY2lmaWMgZnJlcXVlbmN5LCBidXQgdXNlcnNwYWNlIGdvdmVybm9yIGlzIG5vdCAiCisiYXZhaWxhYmxlLFxuIgorIiAgIGZvciBleGFtcGxlIGJlY2F1c2Ugb2YgaGFyZHdhcmUgd2hpY2ggY2Fubm90IGJlIHNldCB0byBhIHNwZWNpZmljICIKKyJmcmVxdWVuY3lcbiIKKyIgICBvciBiZWNhdXNlIHRoZSB1c2Vyc3BhY2UgZ292ZXJub3IgaXNuJ3QgbG9hZGVkP1xuIgorbXNnc3RyICIiCisiRXJybyBhbyBzZXRhciBub3ZvcyB2YWxvcmVzLiBFcnJvcyBjb211bnM6XG4iCisiLSBWb2PDqiB0ZW0gZGlyZWl0b3MgYWRtaW5pc3RyYXRpdm9zIG5lY2Vzc8Ohcmlvcz8gKHN1cGVyLXVzdcOhcmlvPylcbiIKKyItIE8gcmVndWxhZG9yIHF1ZSB2b2PDqiByZXF1ZXNpdG91IGVzdMOhIGRpc3BvbsOtdmVsIGUgZm9pIFwibW9kcHJvYmVkXCI/XG4iCisiLSBUZW50YW5kbyBzZXRhciB1bWEgcG9sw610aWNhIGludsOhbGlkYT9cbiIKKyItIFRlbnRhbmRvIHNldGFyIHVtYSBmcmVxdcOqbmNpYSBlc3BlY8OtZmljYSwgbWFzIG8gcmVndWxhZG9yIGVtIG7DrXZlbCBkZSAiCisidXN1w6FyaW8gbsOjbyBlc3TDoSBkaXNwb27DrXZlbCxcbiIKKyIgICBwb3IgZXhlbXBsbyBkZXZpZG8gYW8gaGFyZHdhcmUgcXVlIG7Do28gcG9kZSBzZXIgc2V0YWRvIHByYSB1bWEgZnJlcXXDqm5jaWEgIgorImVzcGVjw61maWNhXG4iCisiICAgb3UgcG9ycXVlIG8gcmVndWxhZG9yIGVtIG7DrXZlbCBkZSB1c3XDoXJpbyBuw6NvIGZvaSBjYXJyZWdhZG8/XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIndyb25nLCB1bmtub3duIG9yIHVuaGFuZGxlZCBDUFU/XG4iCittc2dzdHIgIkNQVSBlcnJhZG8sIGRlc2NvbmhlY2lkbyBvdSBpbmVzcGVyYWRvP1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIC1mLy0tZnJlcSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWQvLS1taW4sIC11Ly0tbWF4IG9yXG4iCisiLWcvLS1nb3Zlcm5vciBwYXJhbWV0ZXJzXG4iCittc2dzdHIgIiIKKyJvIHBhcsOibWV0cm8gLWYvLS1mcmVxIG7Do28gcG9kZSBzZXIgY29tYmluYWRvIGNvbSBvcyBwYXLDom1ldHJvcyAtZC8tLW1pbiwgLSIKKyJ1Ly0tbWF4IG91XG4iCisiLWcvLS1nb3Zlcm5vclxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQXQgbGVhc3Qgb25lIHBhcmFtZXRlciBvdXQgb2YgLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXgsIGFuZFxuIgorIi1nLy0tZ292ZXJub3IgbXVzdCBiZSBwYXNzZWRcbiIKK21zZ3N0ciAiIgorIlBlbG8gbWVub3MgdW0gcGFyw6JtZXRybyBlbnRyZSAtZi8tLWZyZXEsIC1kLy0tbWluLCAtdS8tLW1heCwgZVxuIgorIi1nLy0tZ292ZXJub3IgZGV2ZSBzZXIgdXNhZG9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2V0dGluZyBjcHU6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIHNldCBbIC1iIHZhbCBdIFsgLW0gdmFsIF0gWyAtcyB2YWwgXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyBbVkFMXSAgICBTZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbSwgLS1zY2hlZC1tYyAgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1zLCAtLXNjaGVkLXNtdCBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgIgorInBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICItLXBlcmYtYmlhcyBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zY2hlZC1tYyBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtc210IHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1tYyAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHNjaGVkLXNtdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHBlcmYtYmlhcyB2YWx1ZSBvbiBDUFUgJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGluZm8gWyAtYiBdIFsgLW0gXSBbIC1zIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWIsIC0tcGVyZi1iaWFzICAgIEdldHMgQ1BVJ3MgcG93ZXIgdnMgcGVyZm9ybWFuY2UgcG9saWN5IG9uIHNvbWVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbCBtb2RlbHMgWzAtMTVdLCBzZWUgbWFucGFnZSBmb3IgZGV0YWlsc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtbSwgLS1zY2hlZC1tYyAgICAgR2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisiLS1wLCAtLXBvbGljeSAgICAgICAgIE9idGVtIGEgcG9sw610aWNhIGRvIGNwdWZyZXEgZW0gdXNvIG5vIG1vbWVudG8gKlxuIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXMsIC0tc2NoZWQtc210ICAgIEdldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJQYXNzaW5nIG5vIG9wdGlvbiB3aWxsIHNob3cgYWxsIGluZm8sIGJ5IGRlZmF1bHQgb25seSBvbiBjb3JlIDBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjLiBpZiBzeXNmcyBmaWxlIGlzIG1pc3NpbmcgaXQnczogZXJybm8gPT0gRU5PRU5UCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTA1IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHN1cHBvcnRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgSW50ZWwncyBwZXJmb3JtYW5jZSBiaWFzIHNldHRpbmdcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHBlcmYtYmlhcyB2YWx1ZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGVyZi1iaWFzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBbmFseXppbmcgQ1BVICVkOlxuIgorbXNnc3RyICJhbmFsaXNhbmRvIG8gQ1BVICVkOlxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IE5vIGlkbGUgc3RhdGVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBDYW4ndCByZWFkIGlkbGUgc3RhdGUgaW5mb1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgbWF4IGlkbGUgc3RhdGUgJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0NgorIywgYy1mb3JtYXQKK21zZ2lkICJOdW1iZXIgb2YgaWRsZSBzdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBpZGxlIHN0YXRlczoiCittc2dzdHIgIiAgbsOtdmVpcyBkZSBmcmVxdcOqbmNpYSBkaXNwb27DrXZlaXM6ICIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmxhZ3MvRGVzY3JpcHRpb246ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGF0ZW5jeTogJWx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkR1cmF0aW9uOiAlbGx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGRyaXZlclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjk0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJDUFVpZGxlIGRyaXZlcjogJXNcbiIKK21zZ3N0ciAiICBkcml2ZXI6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJDUFVpZGxlIGdvdmVybm9yOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgQy1zdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIy4gcHJpbnRmKCJDc3RhdGVzOiAlZFxuIiwgY3N0YXRlcyk7CisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWN0aXZlIHN0YXRlOiAgICAgICAgICAgIEMwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1heF9jc3RhdGU6ICAgICAgICAgICAgICBDJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1heGltdW0gYWxsb3dlZCBsYXRlbmN5OiAlbHUgdXNlY1xuIgorbXNnc3RyICIgIG1haW9yIGxhdMOqbmNpYSBkZSB0cmFuc2nDp8OjbzogIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhdGVzOlx0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDJWQ6ICAgICAgICAgICAgICAgICAgdHlwZVtDJWRdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvbW90aW9uWy0tXSBkZW1vdGlvblstLV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJsYXRlbmN5WyUwM2x1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlWyUwOGx1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmF0aW9uWyUwMjBMdV0gXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgaWRsZWluZm8gW29wdGlvbnNdXG4iCittc2dzdHIgIlVzbzogY3B1ZnJlcS1pbmZvIFtvcMOnw7Vlc11cbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1zLCAtLXNpbGVudCAgICAgICAgIE9ubHkgc2hvdyBnZW5lcmFsIEMtc3RhdGUgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBNb3N0cmEgaW5mb3JtYcOnw6NvIGRlIGRlYnVnXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy8iCisiYWNwaS9wcm9jZXNzb3IvKi9wb3dlclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIG9sZGVyIGtlcm5lbHNcbiIKK21zZ3N0ciAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgTW9zdHJhIGluZm9ybWHDp8OjbyBkbyB0aXBvIHByb3ZpZGEgcGVsYSBpbnRlcmZhY2UgLyIKKyJwcm9jL2NwdWZyZXFcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGVtIGtlcm5lbHMgMi40LiBlIG1haXMgcmVjZW50ZXMgMi42XG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjIwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIlZvY8OqIG7Do28gcG9kZSBlc3BlY2lmaWNhciBtYWlzIGRvIHF1ZSB1bSBwYXLDom1ldHJvIC0tY3B1IGUvb3VcbiIKKyJtYWlzIGRvIHF1ZSB1bSBhcmd1bWVudG8gZGUgc2HDrWRhIGVzcGVjw61maWNvXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICBDUFUgbnVtYmVyIHdoaWNoIGluZm9ybWF0aW9uIHNoYWxsIGJlIGRldGVybWluZWQgIgorI34gImFib3V0XG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgIG7Dum1lcm8gZG8gQ1BVIHNvYnJlIG8gcXVhbCBhcyBpbmZvcsOnw7VlcyBkZXZlbSBzZXIgIgorI34gImRldGVybWluYWRhc1xuIgorCisjfiBtc2dpZCAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgICAgIG51bWJlciBvZiBDUFUgd2hlcmUgY3B1ZnJlcSBzZXR0aW5ncyBzaGFsbCBiZSAiCisjfiAibW9kaWZpZWRcbiIKKyN+IG1zZ3N0ciAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgICAgIG7Dum1lcm8gZG8gQ1BVIG9uZGUgYXMgY29uZmlndXJhw6fDtWVzIGRvIGNwdWZyZXEgIgorI34gInbDo28gc2VyIG1vZGlmaWNhZGFzXG4iCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9idWlsdGluLmggYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9idWlsdGluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg3MGZmYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2J1aWx0aW4uaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIEJVSUxUSU5fSAorI2RlZmluZSBCVUlMVElOX0gKKworZXh0ZXJuIGludCBjbWRfc2V0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitleHRlcm4gaW50IGNtZF9pbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitleHRlcm4gaW50IGNtZF9mcmVxX3NldChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworZXh0ZXJuIGludCBjbWRfZnJlcV9pbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitleHRlcm4gaW50IGNtZF9pZGxlX2luZm8oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2V4dGVybiBpbnQgY21kX21vbml0b3IoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKKworZXh0ZXJuIHZvaWQgc2V0X2hlbHAodm9pZCk7CitleHRlcm4gdm9pZCBpbmZvX2hlbHAodm9pZCk7CitleHRlcm4gdm9pZCBmcmVxX3NldF9oZWxwKHZvaWQpOworZXh0ZXJuIHZvaWQgZnJlcV9pbmZvX2hlbHAodm9pZCk7CitleHRlcm4gdm9pZCBpZGxlX2luZm9faGVscCh2b2lkKTsKK2V4dGVybiB2b2lkIG1vbml0b3JfaGVscCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVmcmVxLWluZm8uYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdWZyZXEtaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYThiZTAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVmcmVxLWluZm8uYwpAQCAtMCwwICsxLDY2NSBAQAorLyoKKyAqICAoQykgMjAwNC0yMDA5ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGdldG9wdC5oPgorCisjaW5jbHVkZSAiY3B1ZnJlcS5oIgorI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImhlbHBlcnMvYml0bWFzay5oIgorCisjZGVmaW5lIExJTkVfTEVOIDEwCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY291bnRfY3B1cyh2b2lkKQoreworCUZJTEUgKmZwOworCWNoYXIgdmFsdWVbTElORV9MRU5dOworCXVuc2lnbmVkIGludCByZXQgPSAwOworCXVuc2lnbmVkIGludCBjcHVuciA9IDA7CisKKwlmcCA9IGZvcGVuKCIvcHJvYy9zdGF0IiwgInIiKTsKKwlpZighZnApIHsKKwkJcHJpbnRmKF8oIkNvdWxkbid0IGNvdW50IHRoZSBudW1iZXIgb2YgQ1BVcyAoJXM6ICVzKSwgYXNzdW1pbmcgMVxuIiksICIvcHJvYy9zdGF0Iiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIDE7CisJfQorCisJd2hpbGUgKCFmZW9mKGZwKSkgeworCQlpZiAoIWZnZXRzKHZhbHVlLCBMSU5FX0xFTiwgZnApKQorCQkJY29udGludWU7CisJCXZhbHVlW0xJTkVfTEVOIC0gMV0gPSAnXDAnOworCQlpZiAoc3RybGVuKHZhbHVlKSA8IChMSU5FX0xFTiAtIDIpKQorCQkJY29udGludWU7CisJCWlmIChzdHJzdHIodmFsdWUsICJjcHUgIikpCisJCQljb250aW51ZTsKKwkJaWYgKHNzY2FuZih2YWx1ZSwgImNwdSVkICIsICZjcHVucikgIT0gMSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY3B1bnIgPiByZXQpCisJCQlyZXQgPSBjcHVucjsKKwl9CisJZmNsb3NlKGZwKTsKKworCS8qIGNwdSBjb3VudCBzdGFydHMgZnJvbSAwLCBvbiBlcnJvciByZXR1cm4gMSAoVVApICovCisJcmV0dXJuIChyZXQrMSk7Cit9CisKKworc3RhdGljIHZvaWQgcHJvY19jcHVmcmVxX291dHB1dCh2b2lkKQoreworCXVuc2lnbmVkIGludCBjcHUsIG5yX2NwdXM7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CisJdW5zaWduZWQgaW50IG1pbl9wY3RnID0gMDsKKwl1bnNpZ25lZCBpbnQgbWF4X3BjdGcgPSAwOworCXVuc2lnbmVkIGxvbmcgbWluLCBtYXg7CisKKwlwcmludGYoXygiICAgICAgICAgIG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICAtICBnb3Zlcm5vclxuIikpOworCisJbnJfY3B1cyA9IGNvdW50X2NwdXMoKTsKKwlmb3IgKGNwdT0wOyBjcHUgPCBucl9jcHVzOyBjcHUrKykgeworCQlwb2xpY3kgPSBjcHVmcmVxX2dldF9wb2xpY3koY3B1KTsKKwkJaWYgKCFwb2xpY3kpCisJCQljb250aW51ZTsKKworCQlpZiAoY3B1ZnJlcV9nZXRfaGFyZHdhcmVfbGltaXRzKGNwdSwgJm1pbiwgJm1heCkpIHsKKwkJCW1heCA9IDA7CisJCX0gZWxzZSB7CisJCQltaW5fcGN0ZyA9IChwb2xpY3ktPm1pbiAqIDEwMCkgLyBtYXg7CisJCQltYXhfcGN0ZyA9IChwb2xpY3ktPm1heCAqIDEwMCkgLyBtYXg7CisJCX0KKwkJcHJpbnRmKCJDUFUlM2QgICAgJTlsdSBrSHogKCUzZCAlJSkgIC0gICU5bHUga0h6ICglM2QgJSUpICAtICAlc1xuIiwKKwkJICAgICAgIGNwdSAsIHBvbGljeS0+bWluLCBtYXggPyBtaW5fcGN0ZyA6IDAsIHBvbGljeS0+bWF4LCBtYXggPyBtYXhfcGN0ZyA6IDAsIHBvbGljeS0+Z292ZXJub3IpOworCisJCWNwdWZyZXFfcHV0X3BvbGljeShwb2xpY3kpOworCX0KK30KKworc3RhdGljIHZvaWQgcHJpbnRfc3BlZWQodW5zaWduZWQgbG9uZyBzcGVlZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmIChzcGVlZCA+IDEwMDAwMDApIHsKKwkJdG1wID0gc3BlZWQgJSAxMDAwMDsKKwkJaWYgKHRtcCA+PSA1MDAwKQorCQkJc3BlZWQgKz0gMTAwMDA7CisJCXByaW50ZiAoIiV1LiUwMnUgR0h6IiwgKCh1bnNpZ25lZCBpbnQpIHNwZWVkLzEwMDAwMDApLAorCQkJKCh1bnNpZ25lZCBpbnQpIChzcGVlZCUxMDAwMDAwKS8xMDAwMCkpOworCX0gZWxzZSBpZiAoc3BlZWQgPiAxMDAwMDApIHsKKwkJdG1wID0gc3BlZWQgJSAxMDAwOworCQlpZiAodG1wID49IDUwMCkKKwkJCXNwZWVkICs9IDEwMDA7CisJCXByaW50ZiAoIiV1IE1IeiIsICgodW5zaWduZWQgaW50KSBzcGVlZCAvIDEwMDApKTsKKwl9IGVsc2UgaWYgKHNwZWVkID4gMTAwMCkgeworCQl0bXAgPSBzcGVlZCAlIDEwMDsKKwkJaWYgKHRtcCA+PSA1MCkKKwkJCXNwZWVkICs9IDEwMDsKKwkJcHJpbnRmICgiJXUuJTAxdSBNSHoiLCAoKHVuc2lnbmVkIGludCkgc3BlZWQvMTAwMCksCisJCQkoKHVuc2lnbmVkIGludCkgKHNwZWVkJTEwMDApLzEwMCkpOworCX0gZWxzZQorCQlwcmludGYgKCIlbHUga0h6Iiwgc3BlZWQpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBwcmludF9kdXJhdGlvbih1bnNpZ25lZCBsb25nIGR1cmF0aW9uKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJaWYgKGR1cmF0aW9uID4gMTAwMDAwMCkgeworCQl0bXAgPSBkdXJhdGlvbiAlIDEwMDAwOworCQlpZiAodG1wID49IDUwMDApCisJCQlkdXJhdGlvbiArPSAxMDAwMDsKKwkJcHJpbnRmICgiJXUuJTAydSBtcyIsICgodW5zaWduZWQgaW50KSBkdXJhdGlvbi8xMDAwMDAwKSwKKwkJCSgodW5zaWduZWQgaW50KSAoZHVyYXRpb24lMTAwMDAwMCkvMTAwMDApKTsKKwl9IGVsc2UgaWYgKGR1cmF0aW9uID4gMTAwMDAwKSB7CisJCXRtcCA9IGR1cmF0aW9uICUgMTAwMDsKKwkJaWYgKHRtcCA+PSA1MDApCisJCQlkdXJhdGlvbiArPSAxMDAwOworCQlwcmludGYgKCIldSB1cyIsICgodW5zaWduZWQgaW50KSBkdXJhdGlvbiAvIDEwMDApKTsKKwl9IGVsc2UgaWYgKGR1cmF0aW9uID4gMTAwMCkgeworCQl0bXAgPSBkdXJhdGlvbiAlIDEwMDsKKwkJaWYgKHRtcCA+PSA1MCkKKwkJCWR1cmF0aW9uICs9IDEwMDsKKwkJcHJpbnRmICgiJXUuJTAxdSB1cyIsICgodW5zaWduZWQgaW50KSBkdXJhdGlvbi8xMDAwKSwKKwkJCSgodW5zaWduZWQgaW50KSAoZHVyYXRpb24lMTAwMCkvMTAwKSk7CisJfSBlbHNlCisJCXByaW50ZiAoIiVsdSBucyIsIGR1cmF0aW9uKTsKKworCXJldHVybjsKK30KKworLyogLS1ib29zdCAvIC1iICovCisKK3N0YXRpYyBpbnQgZ2V0X2Jvb3N0X21vZGUodW5zaWduZWQgaW50IGNwdSkgeworCWludCBzdXBwb3J0LCBhY3RpdmUsIGJfc3RhdGVzID0gMCwgcmV0LCBwc3RhdGVfbm8sIGk7CisJLyogVG9EbzogTWFrZSB0aGlzIG1vcmUgZ2xvYmFsICovCisJdW5zaWduZWQgbG9uZyBwc3RhdGVzW01BWF9IV19QU1RBVEVTXSA9IHswLH07CisKKwlpZiAoY3B1cG93ZXJfY3B1X2luZm8udmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EICYmCisJICAgIGNwdXBvd2VyX2NwdV9pbmZvLnZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGNwdWZyZXFfaGFzX2Jvb3N0X3N1cHBvcnQoY3B1LCAmc3VwcG9ydCwgJmFjdGl2ZSwgJmJfc3RhdGVzKTsKKwlpZiAocmV0KSB7CisJCXByaW50ZihfKCJFcnJvciB3aGlsZSBldmFsdWF0aW5nIEJvb3N0IENhcGFiaWxpdGllcyIKKwkJCQkiIG9uIENQVSAlZCAtLSBhcmUgeW91IHJvb3Q/XG4iKSwgY3B1KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJLyogUCBzdGF0ZSBjaGFuZ2VzIHZpYSBNU1IgYXJlIGlkZW50aWZpZWQgdmlhIGNwdWlkIDgwMDAwMDA3CisJICAgb24gSW50ZWwgYW5kIEFNRCwgYnV0IHdlIGFzc3VtZSBib29zdCBjYXBhYmxlIG1hY2hpbmVzIGNhbiBkbyB0aGF0CisJICAgaWYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+PSAweDgwMDAwMDA3CisJICAgJiYgKGNwdWlkX2VkeCgweDgwMDAwMDA3KSAmICgxIDw8IDcpKSkKKwkqLworCisJcHJpbnRmKF8oIiAgYm9vc3Qgc3RhdGUgc3VwcG9ydDogXG4iKSk7CisKKwlwcmludGYoXygiICAgIFN1cHBvcnRlZDogJXNcbiIpLCBzdXBwb3J0ID8gXygieWVzIikgOiBfKCJubyIpKTsKKwlwcmludGYoXygiICAgIEFjdGl2ZTogJXNcbiIpLCBhY3RpdmUgPyBfKCJ5ZXMiKSA6IF8oIm5vIikpOworCisJLyogVG9EbzogT25seSB3b3JrcyBmb3IgQU1EIGZvciBub3cuLi4gKi8KKwkKKwlpZiAoY3B1cG93ZXJfY3B1X2luZm8udmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EICYmCisJICAgIGNwdXBvd2VyX2NwdV9pbmZvLmZhbWlseSA+PSAweDEwKSB7CisJCXJldCA9IGRlY29kZV9wc3RhdGVzKGNwdSwgY3B1cG93ZXJfY3B1X2luZm8uZmFtaWx5LCBiX3N0YXRlcywKKwkJCQkgICAgIHBzdGF0ZXMsICZwc3RhdGVfbm8pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7CisKKwlwcmludGYoXygiICAgIEJvb3N0IFN0YXRlczogJWRcbiIpLCBiX3N0YXRlcyk7CisJcHJpbnRmKF8oIiAgICBUb3RhbCBTdGF0ZXM6ICVkXG4iKSwgcHN0YXRlX25vKTsKKwlmb3IgKGkgPSAwOyBpIDwgcHN0YXRlX25vOyBpKyspIHsKKwkJaWYgKGkgPCBiX3N0YXRlcykKKwkJCXByaW50ZihfKCIgICAgUHN0YXRlLVBiJWQ6ICVsdU1IeiAoYm9vc3Qgc3RhdGUpXG4iKSwKKwkJCSAgICAgICBpLCBwc3RhdGVzW2ldKTsKKwkJZWxzZQorCQkJcHJpbnRmKF8oIiAgICBQc3RhdGUtUCVkOiAgJWx1TUh6XG4iKSwKKwkJCSAgICAgICBpIC0gYl9zdGF0ZXMsIHBzdGF0ZXNbaV0pOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVidWdfb3V0cHV0X29uZSh1bnNpZ25lZCBpbnQgY3B1KQoreworCWNoYXIgKmRyaXZlcjsKKwlzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpjcHVzOworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqZnJlcXM7CisJdW5zaWduZWQgbG9uZyBtaW4sIG1heCwgZnJlcV9rZXJuZWwsIGZyZXFfaGFyZHdhcmU7CisJdW5zaWduZWQgbG9uZyB0b3RhbF90cmFucywgbGF0ZW5jeTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxfdGltZTsKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeTsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICogZ292ZXJub3JzOworCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0czsKKworCWlmIChjcHVmcmVxX2NwdV9leGlzdHMoY3B1KSkgeworCQlyZXR1cm47CisJfQorCisJZnJlcV9rZXJuZWwgPSBjcHVmcmVxX2dldF9mcmVxX2tlcm5lbChjcHUpOworCWZyZXFfaGFyZHdhcmUgPSBjcHVmcmVxX2dldF9mcmVxX2hhcmR3YXJlKGNwdSk7CisKKwlkcml2ZXIgPSBjcHVmcmVxX2dldF9kcml2ZXIoY3B1KTsKKwlpZiAoIWRyaXZlcikgeworCQlwcmludGYoXygiICBubyBvciB1bmtub3duIGNwdWZyZXEgZHJpdmVyIGlzIGFjdGl2ZSBvbiB0aGlzIENQVVxuIikpOworCX0gZWxzZSB7CisJCXByaW50ZihfKCIgIGRyaXZlcjogJXNcbiIpLCBkcml2ZXIpOworCQljcHVmcmVxX3B1dF9kcml2ZXIoZHJpdmVyKTsKKwl9CisKKwljcHVzID0gY3B1ZnJlcV9nZXRfcmVsYXRlZF9jcHVzKGNwdSk7CisJaWYgKGNwdXMpIHsKKwkJcHJpbnRmKF8oIiAgQ1BVcyB3aGljaCBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgZnJlcXVlbmN5OiAiKSk7CisJCXdoaWxlIChjcHVzLT5uZXh0KSB7CisJCQlwcmludGYoIiVkICIsIGNwdXMtPmNwdSk7CisJCQljcHVzID0gY3B1cy0+bmV4dDsKKwkJfQorCQlwcmludGYoIiVkXG4iLCBjcHVzLT5jcHUpOworCQljcHVmcmVxX3B1dF9yZWxhdGVkX2NwdXMoY3B1cyk7CisJfQorCisJY3B1cyA9IGNwdWZyZXFfZ2V0X2FmZmVjdGVkX2NwdXMoY3B1KTsKKwlpZiAoY3B1cykgeworCQlwcmludGYoXygiICBDUFVzIHdoaWNoIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3kgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmU6ICIpKTsKKwkJd2hpbGUgKGNwdXMtPm5leHQpIHsKKwkJCXByaW50ZigiJWQgIiwgY3B1cy0+Y3B1KTsKKwkJCWNwdXMgPSBjcHVzLT5uZXh0OworCQl9CisJCXByaW50ZigiJWRcbiIsIGNwdXMtPmNwdSk7CisJCWNwdWZyZXFfcHV0X2FmZmVjdGVkX2NwdXMoY3B1cyk7CisJfQorCisJbGF0ZW5jeSA9IGNwdWZyZXFfZ2V0X3RyYW5zaXRpb25fbGF0ZW5jeShjcHUpOworCWlmIChsYXRlbmN5KSB7CisJCXByaW50ZihfKCIgIG1heGltdW0gdHJhbnNpdGlvbiBsYXRlbmN5OiAiKSk7CisJCXByaW50X2R1cmF0aW9uKGxhdGVuY3kpOworCQlwcmludGYoIi5cbiIpOworCX0KKworCWlmICghKGNwdWZyZXFfZ2V0X2hhcmR3YXJlX2xpbWl0cyhjcHUsICZtaW4sICZtYXgpKSkgeworCQlwcmludGYoXygiICBoYXJkd2FyZSBsaW1pdHM6ICIpKTsKKwkJcHJpbnRfc3BlZWQobWluKTsKKwkJcHJpbnRmKCIgLSAiKTsKKwkJcHJpbnRfc3BlZWQobWF4KTsKKwkJcHJpbnRmKCJcbiIpOworCX0KKworCWZyZXFzID0gY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKGNwdSk7CisJaWYgKGZyZXFzKSB7CisJCXByaW50ZihfKCIgIGF2YWlsYWJsZSBmcmVxdWVuY3kgc3RlcHM6ICIpKTsKKwkJd2hpbGUgKGZyZXFzLT5uZXh0KSB7CisJCQlwcmludF9zcGVlZChmcmVxcy0+ZnJlcXVlbmN5KTsKKwkJCXByaW50ZigiLCAiKTsKKwkJCWZyZXFzID0gZnJlcXMtPm5leHQ7CisJCX0KKwkJcHJpbnRfc3BlZWQoZnJlcXMtPmZyZXF1ZW5jeSk7CisJCXByaW50ZigiXG4iKTsKKwkJY3B1ZnJlcV9wdXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKGZyZXFzKTsKKwl9CisKKwlnb3Zlcm5vcnMgPSBjcHVmcmVxX2dldF9hdmFpbGFibGVfZ292ZXJub3JzKGNwdSk7CisJaWYgKGdvdmVybm9ycykgeworCQlwcmludGYoXygiICBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnM6ICIpKTsKKwkJd2hpbGUgKGdvdmVybm9ycy0+bmV4dCkgeworCQkJcHJpbnRmKCIlcywgIiwgZ292ZXJub3JzLT5nb3Zlcm5vcik7CisJCQlnb3Zlcm5vcnMgPSBnb3Zlcm5vcnMtPm5leHQ7CisJCX0KKwkJcHJpbnRmKCIlc1xuIiwgZ292ZXJub3JzLT5nb3Zlcm5vcik7CisJCWNwdWZyZXFfcHV0X2F2YWlsYWJsZV9nb3Zlcm5vcnMoZ292ZXJub3JzKTsKKwl9CisKKwlwb2xpY3kgPSBjcHVmcmVxX2dldF9wb2xpY3koY3B1KTsKKwlpZiAocG9saWN5KSB7CisJCXByaW50ZihfKCIgIGN1cnJlbnQgcG9saWN5OiBmcmVxdWVuY3kgc2hvdWxkIGJlIHdpdGhpbiAiKSk7CisJCXByaW50X3NwZWVkKHBvbGljeS0+bWluKTsKKwkJcHJpbnRmKF8oIiBhbmQgIikpOworCQlwcmludF9zcGVlZChwb2xpY3ktPm1heCk7CisKKwkJcHJpbnRmKCIuXG4gICAgICAgICAgICAgICAgICAiKTsKKwkJcHJpbnRmKF8oIlRoZSBnb3Zlcm5vciBcIiVzXCIgbWF5IgorCQkgICAgICAgIiBkZWNpZGUgd2hpY2ggc3BlZWQgdG8gdXNlXG4gICAgICAgICAgICAgICAgICB3aXRoaW4gdGhpcyByYW5nZS5cbiIpLAorCQkgICAgICAgcG9saWN5LT5nb3Zlcm5vcik7CisJCWNwdWZyZXFfcHV0X3BvbGljeShwb2xpY3kpOworCX0KKworCWlmIChmcmVxX2tlcm5lbCB8fCBmcmVxX2hhcmR3YXJlKSB7CisJCXByaW50ZihfKCIgIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSBpcyAiKSk7CisJCWlmIChmcmVxX2hhcmR3YXJlKSB7CisJCQlwcmludF9zcGVlZChmcmVxX2hhcmR3YXJlKTsKKwkJCXByaW50ZihfKCIgKGFzc2VydGVkIGJ5IGNhbGwgdG8gaGFyZHdhcmUpIikpOworCQl9CisJCWVsc2UKKwkJCXByaW50X3NwZWVkKGZyZXFfa2VybmVsKTsKKwkJcHJpbnRmKCIuXG4iKTsKKwl9CisJc3RhdHMgPSBjcHVmcmVxX2dldF9zdGF0cyhjcHUsICZ0b3RhbF90aW1lKTsKKwlpZiAoc3RhdHMpIHsKKwkJcHJpbnRmKF8oIiAgY3B1ZnJlcSBzdGF0czogIikpOworCQl3aGlsZSAoc3RhdHMpIHsKKwkJCXByaW50X3NwZWVkKHN0YXRzLT5mcmVxdWVuY3kpOworCQkJcHJpbnRmKCI6JS4yZiUlIiwgKDEwMC4wICogc3RhdHMtPnRpbWVfaW5fc3RhdGUpIC8gdG90YWxfdGltZSk7CisJCQlzdGF0cyA9IHN0YXRzLT5uZXh0OworCQkJaWYgKHN0YXRzKQorCQkJCXByaW50ZigiLCAiKTsKKwkJfQorCQljcHVmcmVxX3B1dF9zdGF0cyhzdGF0cyk7CisJCXRvdGFsX3RyYW5zID0gY3B1ZnJlcV9nZXRfdHJhbnNpdGlvbnMoY3B1KTsKKwkJaWYgKHRvdGFsX3RyYW5zKQorCQkJcHJpbnRmKCIgICglbHUpXG4iLCB0b3RhbF90cmFucyk7CisJCWVsc2UKKwkJCXByaW50ZigiXG4iKTsKKwl9CisJZ2V0X2Jvb3N0X21vZGUoY3B1KTsKKworfQorCisvKiAtLWZyZXEgLyAtZiAqLworCitzdGF0aWMgaW50IGdldF9mcmVxX2tlcm5lbCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaHVtYW4pIHsKKwl1bnNpZ25lZCBsb25nIGZyZXEgPSBjcHVmcmVxX2dldF9mcmVxX2tlcm5lbChjcHUpOworCWlmICghZnJlcSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGh1bWFuKSB7CisJCXByaW50X3NwZWVkKGZyZXEpOworCQlwcmludGYoIlxuIik7CisJfSBlbHNlCisJCXByaW50ZigiJWx1XG4iLCBmcmVxKTsKKwlyZXR1cm4gMDsKK30KKworCisvKiAtLWh3ZnJlcSAvIC13ICovCisKK3N0YXRpYyBpbnQgZ2V0X2ZyZXFfaGFyZHdhcmUodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGh1bWFuKSB7CisJdW5zaWduZWQgbG9uZyBmcmVxID0gY3B1ZnJlcV9nZXRfZnJlcV9oYXJkd2FyZShjcHUpOworCWlmICghZnJlcSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGh1bWFuKSB7CisJCXByaW50X3NwZWVkKGZyZXEpOworCQlwcmludGYoIlxuIik7CisJfSBlbHNlCisJCXByaW50ZigiJWx1XG4iLCBmcmVxKTsKKwlyZXR1cm4gMDsKK30KKworLyogLS1od2xpbWl0cyAvIC1sICovCisKK3N0YXRpYyBpbnQgZ2V0X2hhcmR3YXJlX2xpbWl0cyh1bnNpZ25lZCBpbnQgY3B1KSB7CisJdW5zaWduZWQgbG9uZyBtaW4sIG1heDsKKwlpZiAoY3B1ZnJlcV9nZXRfaGFyZHdhcmVfbGltaXRzKGNwdSwgJm1pbiwgJm1heCkpCisJCXJldHVybiAtRUlOVkFMOworCXByaW50ZigiJWx1ICVsdVxuIiwgbWluLCBtYXgpOworCXJldHVybiAwOworfQorCisvKiAtLWRyaXZlciAvIC1kICovCisKK3N0YXRpYyBpbnQgZ2V0X2RyaXZlcih1bnNpZ25lZCBpbnQgY3B1KSB7CisJY2hhciAqZHJpdmVyID0gY3B1ZnJlcV9nZXRfZHJpdmVyKGNwdSk7CisJaWYgKCFkcml2ZXIpCisJCXJldHVybiAtRUlOVkFMOworCXByaW50ZigiJXNcbiIsIGRyaXZlcik7CisJY3B1ZnJlcV9wdXRfZHJpdmVyKGRyaXZlcik7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tcG9saWN5IC8gLXAgKi8KKworc3RhdGljIGludCBnZXRfcG9saWN5KHVuc2lnbmVkIGludCBjcHUpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSA9IGNwdWZyZXFfZ2V0X3BvbGljeShjcHUpOworCWlmICghcG9saWN5KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwcmludGYoIiVsdSAlbHUgJXNcbiIsIHBvbGljeS0+bWluLCBwb2xpY3ktPm1heCwgcG9saWN5LT5nb3Zlcm5vcik7CisJY3B1ZnJlcV9wdXRfcG9saWN5KHBvbGljeSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tZ292ZXJub3JzIC8gLWcgKi8KKworc3RhdGljIGludCBnZXRfYXZhaWxhYmxlX2dvdmVybm9ycyh1bnNpZ25lZCBpbnQgY3B1KSB7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqZ292ZXJub3JzID0gY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2dvdmVybm9ycyhjcHUpOworCWlmICghZ292ZXJub3JzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdoaWxlIChnb3Zlcm5vcnMtPm5leHQpIHsKKwkJcHJpbnRmKCIlcyAiLCBnb3Zlcm5vcnMtPmdvdmVybm9yKTsKKwkJZ292ZXJub3JzID0gZ292ZXJub3JzLT5uZXh0OworCX0KKwlwcmludGYoIiVzXG4iLCBnb3Zlcm5vcnMtPmdvdmVybm9yKTsKKwljcHVmcmVxX3B1dF9hdmFpbGFibGVfZ292ZXJub3JzKGdvdmVybm9ycyk7CisJcmV0dXJuIDA7Cit9CisKKworLyogLS1hZmZlY3RlZC1jcHVzICAvIC1hICovCisKK3N0YXRpYyBpbnQgZ2V0X2FmZmVjdGVkX2NwdXModW5zaWduZWQgaW50IGNwdSkgeworCXN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmNwdXMgPSBjcHVmcmVxX2dldF9hZmZlY3RlZF9jcHVzKGNwdSk7CisJaWYgKCFjcHVzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdoaWxlIChjcHVzLT5uZXh0KSB7CisJCXByaW50ZigiJWQgIiwgY3B1cy0+Y3B1KTsKKwkJY3B1cyA9IGNwdXMtPm5leHQ7CisJfQorCXByaW50ZigiJWRcbiIsIGNwdXMtPmNwdSk7CisJY3B1ZnJlcV9wdXRfYWZmZWN0ZWRfY3B1cyhjcHVzKTsKKwlyZXR1cm4gMDsKK30KKworLyogLS1yZWxhdGVkLWNwdXMgIC8gLXIgKi8KKworc3RhdGljIGludCBnZXRfcmVsYXRlZF9jcHVzKHVuc2lnbmVkIGludCBjcHUpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpjcHVzID0gY3B1ZnJlcV9nZXRfcmVsYXRlZF9jcHVzKGNwdSk7CisJaWYgKCFjcHVzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdoaWxlIChjcHVzLT5uZXh0KSB7CisJCXByaW50ZigiJWQgIiwgY3B1cy0+Y3B1KTsKKwkJY3B1cyA9IGNwdXMtPm5leHQ7CisJfQorCXByaW50ZigiJWRcbiIsIGNwdXMtPmNwdSk7CisJY3B1ZnJlcV9wdXRfcmVsYXRlZF9jcHVzKGNwdXMpOworCXJldHVybiAwOworfQorCisvKiAtLXN0YXRzIC8gLXMgKi8KKworc3RhdGljIGludCBnZXRfZnJlcV9zdGF0cyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaHVtYW4pIHsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3RyYW5zID0gY3B1ZnJlcV9nZXRfdHJhbnNpdGlvbnMoY3B1KTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxfdGltZTsKKwlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdHMgPSBjcHVmcmVxX2dldF9zdGF0cyhjcHUsICZ0b3RhbF90aW1lKTsKKwl3aGlsZSAoc3RhdHMpIHsKKwkJaWYgKGh1bWFuKSB7CisJCQlwcmludF9zcGVlZChzdGF0cy0+ZnJlcXVlbmN5KTsKKwkJCXByaW50ZigiOiUuMmYlJSIsICgxMDAuMCAqIHN0YXRzLT50aW1lX2luX3N0YXRlKSAvIHRvdGFsX3RpbWUpOworCQl9CisJCWVsc2UKKwkJCXByaW50ZigiJWx1OiVsbHUiLCBzdGF0cy0+ZnJlcXVlbmN5LCBzdGF0cy0+dGltZV9pbl9zdGF0ZSk7CisJCXN0YXRzID0gc3RhdHMtPm5leHQ7CisJCWlmIChzdGF0cykKKwkJCXByaW50ZigiLCAiKTsKKwl9CisJY3B1ZnJlcV9wdXRfc3RhdHMoc3RhdHMpOworCWlmICh0b3RhbF90cmFucykKKwkJcHJpbnRmKCIgICglbHUpXG4iLCB0b3RhbF90cmFucyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tbGF0ZW5jeSAvIC15ICovCisKK3N0YXRpYyBpbnQgZ2V0X2xhdGVuY3kodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGh1bWFuKSB7CisJdW5zaWduZWQgbG9uZyBsYXRlbmN5ID0gY3B1ZnJlcV9nZXRfdHJhbnNpdGlvbl9sYXRlbmN5KGNwdSk7CisJaWYgKCFsYXRlbmN5KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChodW1hbikgeworCQlwcmludF9kdXJhdGlvbihsYXRlbmN5KTsKKwkJcHJpbnRmKCJcbiIpOworCX0gZWxzZQorCQlwcmludGYoIiVsdVxuIiwgbGF0ZW5jeSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZnJlcV9pbmZvX2hlbHAodm9pZCkgeworCXByaW50ZihfKCJVc2FnZTogY3B1cG93ZXIgZnJlcWluZm8gW29wdGlvbnNdXG4iKSk7CisJcHJpbnRmKF8oIk9wdGlvbnM6XG4iKSk7CisJcHJpbnRmKF8oIiAgLWUsIC0tZGVidWcgICAgICAgICAgUHJpbnRzIG91dCBkZWJ1ZyBpbmZvcm1hdGlvbiBbZGVmYXVsdF1cbiIpKTsKKwlwcmludGYoXygiICAtZiwgLS1mcmVxICAgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGFjY29yZGluZ1xuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3B1ZnJlcSBjb3JlICpcbiIpKTsKKwlwcmludGYoXygiICAtdywgLS1od2ZyZXEgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGJ5IHJlYWRpbmdcbiIKKwkgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgaXQgZnJvbSBoYXJkd2FyZSAob25seSBhdmFpbGFibGUgdG8gcm9vdCkgKlxuIikpOworCXByaW50ZihfKCIgIC1sLCAtLWh3bGltaXRzICAgICAgIERldGVybWluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBDUFUgZnJlcXVlbmN5IGFsbG93ZWQgKlxuIikpOworCXByaW50ZihfKCIgIC1kLCAtLWRyaXZlciAgICAgICAgIERldGVybWluZXMgdGhlIHVzZWQgY3B1ZnJlcSBrZXJuZWwgZHJpdmVyICpcbiIpKTsKKwlwcmludGYoXygiICAtcCwgLS1wb2xpY3kgICAgICAgICBHZXRzIHRoZSBjdXJyZW50bHkgdXNlZCBjcHVmcmVxIHBvbGljeSAqXG4iKSk7CisJcHJpbnRmKF8oIiAgLWcsIC0tZ292ZXJub3JzICAgICAgRGV0ZXJtaW5lcyBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnMgKlxuIikpOworCXByaW50ZihfKCIgIC1yLCAtLXJlbGF0ZWQtY3B1cyAgIERldGVybWluZXMgd2hpY2ggQ1BVcyBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgZnJlcXVlbmN5ICpcbiIpKTsKKwlwcmludGYoXygiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeVxuIgorCQkJIiAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmUgKlxuIikpOworCXByaW50ZihfKCIgIC1zLCAtLXN0YXRzICAgICAgICAgIFNob3dzIGNwdWZyZXEgc3RhdGlzdGljcyBpZiBhdmFpbGFibGVcbiIpKTsKKwlwcmludGYoXygiICAteSwgLS1sYXRlbmN5ICAgICAgICBEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGxhdGVuY3kgb24gQ1BVIGZyZXF1ZW5jeSBjaGFuZ2VzICpcbiIpKTsKKwlwcmludGYoXygiICAtYiwgLS1ib29zdCAgICAgICAgICBDaGVja3MgZm9yIHR1cmJvIG9yIGJvb3N0IG1vZGVzICAqXG4iKSk7CisJcHJpbnRmKF8oIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy9jcHVmcmVxXG4iCisJICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiAyLjQuIGFuZCBlYXJseSAyLjYuIGtlcm5lbHNcbiIpKTsKKwlwcmludGYoXygiICAtbSwgLS1odW1hbiAgICAgICAgICBodW1hbi1yZWFkYWJsZSBvdXRwdXQgZm9yIHRoZSAtZiwgLXcsIC1zIGFuZCAteSBwYXJhbWV0ZXJzXG4iKSk7CisJcHJpbnRmKF8oIiAgLWgsIC0taGVscCAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIikpOworCisJcHJpbnRmKCJcbiIpOworCXByaW50ZihfKCJJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgZnVsbCBvdXRwdXQgYWJvdXRcbiIKKwkgICAgICAgImNwdWZyZXEgaXMgcHJpbnRlZCB3aGljaCBpcyB1c2VmdWwgZS5nLiBmb3IgcmVwb3J0aW5nIGJ1Z3MuXG5cbiIpKTsKKwlwcmludGYoXygiQnkgZGVmYXVsdCBpbmZvIG9mIENQVSAwIGlzIHNob3duIHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuIFxuIgorCQkgIndpdGggdGhlIGNwdXBvd2VyIC0tY3B1IG1haW4gY29tbWFuZCBvcHRpb24uXG4iKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGluZm9fb3B0c1tdID0geworCXsgLm5hbWU9ImRlYnVnIiwJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdlJ30sCisJeyAubmFtZT0iYm9vc3QiLAkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J2InfSwKKwl7IC5uYW1lPSJmcmVxIiwJCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0nZid9LAorCXsgLm5hbWU9Imh3ZnJlcSIsCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0ndyd9LAorCXsgLm5hbWU9Imh3bGltaXRzIiwJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdsJ30sCisJeyAubmFtZT0iZHJpdmVyIiwJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdkJ30sCisJeyAubmFtZT0icG9saWN5IiwJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdwJ30sCisJeyAubmFtZT0iZ292ZXJub3JzIiwJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdnJ30sCisJeyAubmFtZT0icmVsYXRlZC1jcHVzIiwgLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdyJ30sCisJeyAubmFtZT0iYWZmZWN0ZWQtY3B1cyIsLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdhJ30sCisJeyAubmFtZT0ic3RhdHMiLAkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J3MnfSwKKwl7IC5uYW1lPSJsYXRlbmN5IiwJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSd5J30sCisJeyAubmFtZT0icHJvYyIsCQkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J28nfSwKKwl7IC5uYW1lPSJodW1hbiIsCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0nbSd9LAorCXsgLm5hbWU9ImhlbHAiLAkJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdoJ30sCisJeyB9LAorfTsKKworaW50IGNtZF9mcmVxX2luZm8oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWV4dGVybiBjaGFyICpvcHRhcmc7CisJZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0OworCWludCByZXQgPSAwLCBjb250ID0gMTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gMDsKKwl1bnNpZ25lZCBpbnQgaHVtYW4gPSAwOworCWludCBvdXRwdXRfcGFyYW0gPSAwOworCisJZG8geworCQlyZXQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiaG9lZndsZHBncmFzbXliIiwgaW5mb19vcHRzLCBOVUxMKTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAnPyc6CisJCQlvdXRwdXRfcGFyYW0gPSAnPyc7CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJCW91dHB1dF9wYXJhbSA9ICdoJzsKKwkJCWNvbnQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgLTE6CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdiJzoKKwkJY2FzZSAnbyc6CisJCWNhc2UgJ2EnOgorCQljYXNlICdyJzoKKwkJY2FzZSAnZyc6CisJCWNhc2UgJ3AnOgorCQljYXNlICdkJzoKKwkJY2FzZSAnbCc6CisJCWNhc2UgJ3cnOgorCQljYXNlICdmJzoKKwkJY2FzZSAnZSc6CisJCWNhc2UgJ3MnOgorCQljYXNlICd5JzoKKwkJCWlmIChvdXRwdXRfcGFyYW0pIHsKKwkJCQlvdXRwdXRfcGFyYW0gPSAtMTsKKwkJCQljb250ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW91dHB1dF9wYXJhbSA9IHJldDsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCWlmIChodW1hbikgeworCQkJCW91dHB1dF9wYXJhbSA9IC0xOworCQkJCWNvbnQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJaHVtYW4gPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIik7CisJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCQl9CisJfSB3aGlsZShjb250KTsKKworCXN3aXRjaCAob3V0cHV0X3BhcmFtKSB7CisJY2FzZSAnbyc6CisJCWlmICghYml0bWFza19pc2FsbGNsZWFyKGNwdXNfY2hvc2VuKSkgeworCQkJcHJpbnRmKF8oIlRoZSBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyB0b29sIGNhbid0IGJlICIKKwkJCQkgImNvbWJpbmVkIHdpdGggcGFzc2luZyBhIC0tY3B1IGFyZ3VtZW50XG4iKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIDA6CisJCW91dHB1dF9wYXJhbSA9ICdlJzsKKwl9CisKKwlyZXQgPSAwOworCisJLyogRGVmYXVsdCBpczogc2hvdyBvdXRwdXQgb2YgQ1BVIDAgb25seSAqLworCWlmIChiaXRtYXNrX2lzYWxsY2xlYXIoY3B1c19jaG9zZW4pKQorCQliaXRtYXNrX3NldGJpdChjcHVzX2Nob3NlbiwgMCk7CisJCQorCXN3aXRjaCAob3V0cHV0X3BhcmFtKSB7CisJY2FzZSAtMToKKwkJcHJpbnRmKF8oIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgLS1jcHUgcGFyYW1ldGVyIGFuZC9vclxuIgorCQkgICAgICAgIm1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iKSk7CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgJz8nOgorCQlwcmludGYoXygiaW52YWxpZCBvciB1bmtub3duIGFyZ3VtZW50XG4iKSk7CisJCWZyZXFfaW5mb19oZWxwKCk7CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgJ2gnOgorCQlmcmVxX2luZm9faGVscCgpOworCQlyZXR1cm4gRVhJVF9TVUNDRVNTOworCWNhc2UgJ28nOgorCQlwcm9jX2NwdWZyZXFfb3V0cHV0KCk7CisJCXJldHVybiBFWElUX1NVQ0NFU1M7CisJfQorCisJZm9yIChjcHUgPSBiaXRtYXNrX2ZpcnN0KGNwdXNfY2hvc2VuKTsKKwkgICAgIGNwdSA8PSBiaXRtYXNrX2xhc3QoY3B1c19jaG9zZW4pOyBjcHUrKykgeworCisJCWlmICghYml0bWFza19pc2JpdHNldChjcHVzX2Nob3NlbiwgY3B1KSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY3B1ZnJlcV9jcHVfZXhpc3RzKGNwdSkpIHsKKwkJCXByaW50ZihfKCJjb3VsZG4ndCBhbmFseXplIENQVSAlZCBhcyBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgcHJlc2VudFxuIiksIGNwdSk7CisJCQljb250aW51ZTsKKwkJfQorCQlwcmludGYoXygiYW5hbHl6aW5nIENQVSAlZDpcbiIpLCBjcHUpOworCisJCXN3aXRjaCAob3V0cHV0X3BhcmFtKSB7CisJCWNhc2UgJ2InOgorCQkJZ2V0X2Jvb3N0X21vZGUoY3B1KTsKKwkJCWJyZWFrOworCQljYXNlICdlJzoKKwkJCWRlYnVnX291dHB1dF9vbmUoY3B1KTsKKwkJCWJyZWFrOworCQljYXNlICdhJzoKKwkJCXJldCA9IGdldF9hZmZlY3RlZF9jcHVzKGNwdSk7CisJCQlicmVhazsKKwkJY2FzZSAncic6CisJCQlyZXQgPSBnZXRfcmVsYXRlZF9jcHVzKGNwdSk7CisJCQlicmVhazsKKwkJY2FzZSAnZyc6CisJCQlyZXQgPSBnZXRfYXZhaWxhYmxlX2dvdmVybm9ycyhjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgJ3AnOgorCQkJcmV0ID0gZ2V0X3BvbGljeShjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgJ2QnOgorCQkJcmV0ID0gZ2V0X2RyaXZlcihjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgJ2wnOgorCQkJcmV0ID0gZ2V0X2hhcmR3YXJlX2xpbWl0cyhjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgJ3cnOgorCQkJcmV0ID0gZ2V0X2ZyZXFfaGFyZHdhcmUoY3B1LCBodW1hbik7CisJCQlicmVhazsKKwkJY2FzZSAnZic6CisJCQlyZXQgPSBnZXRfZnJlcV9rZXJuZWwoY3B1LCBodW1hbik7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlyZXQgPSBnZXRfZnJlcV9zdGF0cyhjcHUsIGh1bWFuKTsKKwkJCWJyZWFrOworCQljYXNlICd5JzoKKwkJCXJldCA9IGdldF9sYXRlbmN5KGNwdSwgaHVtYW4pOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHJldCkKKwkJCXJldHVybiAocmV0KTsKKwl9CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdWZyZXEtc2V0LmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVmcmVxLXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MTViNmIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVmcmVxLXNldC5jCkBAIC0wLDAgKzEsMzU3IEBACisvKgorICogIChDKSAyMDA0LTIwMDkgIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLmRlPgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKworI2luY2x1ZGUgImNwdWZyZXEuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKworI2RlZmluZSBOT1JNX0ZSRVFfTEVOIDMyCisKK3ZvaWQgZnJlcV9zZXRfaGVscCh2b2lkKQoreworCXByaW50ZihfKCJVc2FnZTogY3B1cG93ZXIgZnJlcXVlbmN5LXNldCBbb3B0aW9uc11cbiIpKTsKKwlwcmludGYoXygiT3B0aW9uczpcbiIpKTsKKwlwcmludGYoXygiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbmV3IG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5IHNlbGVjdFxuIikpOworCXByaW50ZihfKCIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBuZXcgbWF4aW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgc2VsZWN0XG4iKSk7CisJcHJpbnRmKF8oIiAgLWcgR09WLCAtLWdvdmVybm9yIEdPViAgIG5ldyBjcHVmcmVxIGdvdmVybm9yXG4iKSk7CisJcHJpbnRmKF8oIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIHNwZWNpZmljIGZyZXF1ZW5jeSB0byBiZSBzZXQuIFJlcXVpcmVzIHVzZXJzcGFjZVxuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgZ292ZXJub3IgdG8gYmUgYXZhaWxhYmxlIGFuZCBsb2FkZWRcbiIpKTsKKwlwcmludGYoXygiICAtciwgLS1yZWxhdGVkICAgICAgICAgICAgU3dpdGNoZXMgYWxsIGhhcmR3YXJlLXJlbGF0ZWQgQ1BVc1xuIikpOworCXByaW50ZihfKCIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iKSk7CisJcHJpbnRmKCJcbiIpOworCXByaW50ZihfKCJOb3RlczpcbiIKKwkgICAgICAgIjEuIE9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gXCJhbGxcIlxuIikpOworCXByaW50ZihfKCIyLiBUaGUgLWYgRlJFUSwgLS1mcmVxIEZSRVEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciBwYXJhbWV0ZXJcbiIKKwkgICAgICAgIiAgIGV4Y2VwdCB0aGUgLWMgQ1BVLCAtLWNwdSBDUFUgcGFyYW1ldGVyXG4iCisJICAgICAgICIzLiBGUkVRdWVuY2llcyBjYW4gYmUgcGFzc2VkIGluIEh6LCBrSHogKGRlZmF1bHQpLCBNSHosIEdIeiwgb3IgVEh6XG4iCisJICAgICAgICIgICBieSBwb3N0Zml4aW5nIHRoZSB2YWx1ZSB3aXRoIHRoZSB3YW50ZWQgdW5pdCBuYW1lLCB3aXRob3V0IGFueSBzcGFjZVxuIgorCSAgICAgICAiICAgKEZSRVF1ZW5jeSBpbiBrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLlxuIikpOworCit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIHNldF9vcHRzW10gPSB7CisJeyAubmFtZT0ibWluIiwJCS5oYXNfYXJnPXJlcXVpcmVkX2FyZ3VtZW50LAkuZmxhZz1OVUxMLAkudmFsPSdkJ30sCisJeyAubmFtZT0ibWF4IiwJCS5oYXNfYXJnPXJlcXVpcmVkX2FyZ3VtZW50LAkuZmxhZz1OVUxMLAkudmFsPSd1J30sCisJeyAubmFtZT0iZ292ZXJub3IiLAkuaGFzX2FyZz1yZXF1aXJlZF9hcmd1bWVudCwJLmZsYWc9TlVMTCwJLnZhbD0nZyd9LAorCXsgLm5hbWU9ImZyZXEiLAkJLmhhc19hcmc9cmVxdWlyZWRfYXJndW1lbnQsCS5mbGFnPU5VTEwsCS52YWw9J2YnfSwKKwl7IC5uYW1lPSJoZWxwIiwJCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0naCd9LAorCXsgLm5hbWU9InJlbGF0ZWQiLAkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J3InfSwKKwl7IH0sCit9OworCitzdGF0aWMgdm9pZCBwcmludF9lcnJvcih2b2lkKQoreworCXByaW50ZihfKCJFcnJvciBzZXR0aW5nIG5ldyB2YWx1ZXMuIENvbW1vbiBlcnJvcnM6XG4iCisJCQkiLSBEbyB5b3UgaGF2ZSBwcm9wZXIgYWRtaW5pc3RyYXRpb24gcmlnaHRzPyAoc3VwZXItdXNlcj8pXG4iCisJCQkiLSBJcyB0aGUgZ292ZXJub3IgeW91IHJlcXVlc3RlZCBhdmFpbGFibGUgYW5kIG1vZHByb2JlZD9cbiIKKwkJCSItIFRyeWluZyB0byBzZXQgYW4gaW52YWxpZCBwb2xpY3k/XG4iCisJCQkiLSBUcnlpbmcgdG8gc2V0IGEgc3BlY2lmaWMgZnJlcXVlbmN5LCBidXQgdXNlcnNwYWNlIGdvdmVybm9yIGlzIG5vdCBhdmFpbGFibGUsXG4iCisJCQkiICAgZm9yIGV4YW1wbGUgYmVjYXVzZSBvZiBoYXJkd2FyZSB3aGljaCBjYW5ub3QgYmUgc2V0IHRvIGEgc3BlY2lmaWMgZnJlcXVlbmN5XG4iCisJCQkiICAgb3IgYmVjYXVzZSB0aGUgdXNlcnNwYWNlIGdvdmVybm9yIGlzbid0IGxvYWRlZD9cbiIpKTsKK307CisKK3N0cnVjdCBmcmVxX3VuaXRzIHsKKwljaGFyKgkJc3RyX3VuaXQ7CisJaW50CQlwb3dlcl9vZl90ZW47Cit9OworCitjb25zdCBzdHJ1Y3QgZnJlcV91bml0cyBkZWZfdW5pdHNbXSA9IHsKKwl7Imh6IiwgLTN9LAorCXsia2h6IiwgMH0sIC8qIGRlZmF1bHQgKi8KKwl7Im1oeiIsIDN9LAorCXsiZ2h6IiwgNn0sCisJeyJ0aHoiLCA5fSwKKwl7TlVMTCwgMH0KK307CisKK3N0YXRpYyB2b2lkIHByaW50X3Vua25vd25fYXJnKHZvaWQpCit7CisJcHJpbnRmKF8oImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIikpOworCWZyZXFfc2V0X2hlbHAoKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RyaW5nX3RvX2ZyZXF1ZW5jeShjb25zdCBjaGFyICpzdHIpCit7CisJY2hhciBub3JtYWxpemVkW05PUk1fRlJFUV9MRU5dOworCWNvbnN0IHN0cnVjdCBmcmVxX3VuaXRzICp1bml0OworCWNvbnN0IGNoYXIgKnNjYW47CisJY2hhciAqZW5kOworCXVuc2lnbmVkIGxvbmcgZnJlcTsKKwlpbnQgcG93ZXIgPSAwLCBtYXRjaF9jb3VudCA9IDAsIGksIGNwLCBwYWQ7CisKKwl3aGlsZSAoKnN0ciA9PSAnMCcpCisJCXN0cisrOworCisJZm9yIChzY2FuID0gc3RyOyBpc2RpZ2l0KCpzY2FuKSB8fCAqc2NhbiA9PSAnLic7IHNjYW4rKykgeworCQlpZiAoKnNjYW4gPT0gJy4nICYmIG1hdGNoX2NvdW50ID09IDApCisJCQltYXRjaF9jb3VudCA9IDE7CisJCWVsc2UgaWYgKCpzY2FuID09ICcuJyAmJiBtYXRjaF9jb3VudCA9PSAxKQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKCpzY2FuKSB7CisJCW1hdGNoX2NvdW50ID0gMDsKKwkJZm9yICh1bml0ID0gZGVmX3VuaXRzOyB1bml0LT5zdHJfdW5pdDsgdW5pdCsrKSB7CisJCQlmb3IgKGkgPSAwOworCQkJICAgICBzY2FuW2ldICYmIHRvbG93ZXIoc2NhbltpXSkgPT0gdW5pdC0+c3RyX3VuaXRbaV07CisJCQkgICAgICsraSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzY2FuW2ldKQorCQkJCWNvbnRpbnVlOworCQkJbWF0Y2hfY291bnQrKzsKKwkJCXBvd2VyID0gdW5pdC0+cG93ZXJfb2ZfdGVuOworCQl9CisJCWlmIChtYXRjaF9jb3VudCAhPSAxKQorCQkJcmV0dXJuIDA7CisJfQorCisJLyogY291bnQgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gYmUgY29waWVkICovCisJZm9yIChjcCA9IDA7IGlzZGlnaXQoc3RyW2NwXSk7IGNwKyspCisJCWNvbnRpbnVlOworCisJaWYgKHN0cltjcF0gPT0gJy4nKSB7CisJCXdoaWxlIChwb3dlciA+IC0xICYmIGlzZGlnaXQoc3RyW2NwKzFdKSkKKwkJCWNwKyssIHBvd2VyLS07CisJfQorCWlmIChwb3dlciA+PSAtMSkJLyogbm90IGVub3VnaCA9PiBwYWQgKi8KKwkJcGFkID0gcG93ZXIgKyAxOworCWVsc2UJCQkvKiB0byBtdWNoID0+IHN0cmlwICovCisJCXBhZCA9IDAsIGNwICs9IHBvd2VyICsgMTsKKwkvKiBjaGVjayBib3VuZHMgKi8KKwlpZiAoY3AgPD0gMCB8fCBjcCArIHBhZCA+IE5PUk1fRlJFUV9MRU4gLSAxKQorCQlyZXR1cm4gMDsKKworCS8qIGNvcHkgZGlnaXRzICovCisJZm9yIChpID0gMDsgaSA8IGNwOyBpKyssIHN0cisrKSB7CisJCWlmICgqc3RyID09ICcuJykKKwkJCXN0cisrOworCQlub3JtYWxpemVkW2ldID0gKnN0cjsKKwl9CisJLyogYW5kIHBhZCAqLworCWZvciAoOyBpIDwgY3AgKyBwYWQ7IGkrKykKKwkJbm9ybWFsaXplZFtpXSA9ICcwJzsKKworCS8qIHJvdW5kIHVwLCBkb3duID8gKi8KKwltYXRjaF9jb3VudCA9IChub3JtYWxpemVkW2ktMV0gPj0gJzUnKTsKKwkvKiBhbmQgZHJvcCB0aGUgZGVjaW1hbCBwYXJ0ICovCisJbm9ybWFsaXplZFtpLTFdID0gMDsgLyogY3AgPiAwICYmIHBhZCA+PSAwID09PiBpID4gMCAqLworCisJLyogZmluYWwgY29udmVyc2lvbiAoYW5kIGFwcGx5aW5nIHJvdW5kaW5nKSAqLworCWVycm5vID0gMDsKKwlmcmVxID0gc3RydG91bChub3JtYWxpemVkLCAmZW5kLCAxMCk7CisJaWYgKGVycm5vKQorCQlyZXR1cm4gMDsKKwllbHNlIHsKKwkJaWYgKG1hdGNoX2NvdW50ICYmIGZyZXEgIT0gVUxPTkdfTUFYKQorCQkJZnJlcSsrOworCQlyZXR1cm4gZnJlcTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZG9fbmV3X3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKm5ld19wb2wpCit7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjdXJfcG9sID0gY3B1ZnJlcV9nZXRfcG9saWN5KGNwdSk7CisJaW50IHJldDsKKworCWlmICghY3VyX3BvbCkgeworCQlwcmludGYoXygid3JvbmcsIHVua25vd24gb3IgdW5oYW5kbGVkIENQVT9cbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFuZXdfcG9sLT5taW4pCisJCW5ld19wb2wtPm1pbiA9IGN1cl9wb2wtPm1pbjsKKworCWlmICghbmV3X3BvbC0+bWF4KQorCQluZXdfcG9sLT5tYXggPSBjdXJfcG9sLT5tYXg7CisKKwlpZiAoIW5ld19wb2wtPmdvdmVybm9yKQorCQluZXdfcG9sLT5nb3Zlcm5vciA9IGN1cl9wb2wtPmdvdmVybm9yOworCisJcmV0ID0gY3B1ZnJlcV9zZXRfcG9saWN5KGNwdSwgbmV3X3BvbCk7CisKKwljcHVmcmVxX3B1dF9wb2xpY3koY3VyX3BvbCk7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgZG9fb25lX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKm5ld19wb2wsCisJCXVuc2lnbmVkIGxvbmcgZnJlcSwgdW5zaWduZWQgaW50IHBjKQoreworCXN3aXRjaCAocGMpIHsKKwljYXNlIDA6CisJCXJldHVybiBjcHVmcmVxX3NldF9mcmVxdWVuY3koY3B1LCBmcmVxKTsKKworCWNhc2UgMToKKwkJLyogaWYgb25seSBvbmUgdmFsdWUgb2YgYSBwb2xpY3kgaXMgdG8gYmUgY2hhbmdlZCwgd2UgY2FuCisJCSAqIHVzZSBhICJmYXN0IHBhdGgiLgorCQkgKi8KKwkJaWYgKG5ld19wb2wtPm1pbikKKwkJCXJldHVybiBjcHVmcmVxX21vZGlmeV9wb2xpY3lfbWluKGNwdSwgbmV3X3BvbC0+bWluKTsKKwkJZWxzZSBpZiAobmV3X3BvbC0+bWF4KQorCQkJcmV0dXJuIGNwdWZyZXFfbW9kaWZ5X3BvbGljeV9tYXgoY3B1LCBuZXdfcG9sLT5tYXgpOworCQllbHNlIGlmIChuZXdfcG9sLT5nb3Zlcm5vcikKKwkJCXJldHVybiBjcHVmcmVxX21vZGlmeV9wb2xpY3lfZ292ZXJub3IoY3B1LCBuZXdfcG9sLT5nb3Zlcm5vcik7CisKKwlkZWZhdWx0OgorCQkvKiBzbG93IHBhdGggKi8KKwkJcmV0dXJuIGRvX25ld19wb2xpY3koY3B1LCBuZXdfcG9sKTsKKwl9Cit9CisKK2ludCBjbWRfZnJlcV9zZXQoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWV4dGVybiBjaGFyICpvcHRhcmc7CisJZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0OworCWludCByZXQgPSAwLCBjb250ID0gMTsKKwlpbnQgZG91YmxlX3Bhcm0gPSAwLCByZWxhdGVkID0gMCwgcG9saWN5Y2hhbmdlID0gMDsKKwl1bnNpZ25lZCBsb25nIGZyZXEgPSAwOworCWNoYXIgZ292WzIwXTsKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJc3RydWN0IGNwdWZyZXFfcG9saWN5IG5ld19wb2wgPSB7CisJCS5taW4gPSAwLAorCQkubWF4ID0gMCwKKwkJLmdvdmVybm9yID0gTlVMTCwKKwl9OworCisJLyogcGFyYW1ldGVyIHBhcnNpbmcgKi8KKwlkbyB7CisJCXJldCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJkOnU6ZzpmOmhyIiwgc2V0X29wdHMsIE5VTEwpOworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlICc/JzoKKwkJCXByaW50X3Vua25vd25fYXJnKCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2FzZSAnaCc6CisJCQlmcmVxX3NldF9oZWxwKCk7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAtMToKKwkJCWNvbnQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJ3InOgorCQkJaWYgKHJlbGF0ZWQpCisJCQkJZG91YmxlX3Bhcm0rKzsKKwkJCXJlbGF0ZWQrKzsKKwkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJCWlmIChuZXdfcG9sLm1pbikKKwkJCQlkb3VibGVfcGFybSsrOworCQkJcG9saWN5Y2hhbmdlKys7CisJCQluZXdfcG9sLm1pbiA9IHN0cmluZ190b19mcmVxdWVuY3kob3B0YXJnKTsKKwkJCWlmIChuZXdfcG9sLm1pbiA9PSAwKSB7CisJCQkJcHJpbnRfdW5rbm93bl9hcmcoKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICd1JzoKKwkJCWlmIChuZXdfcG9sLm1heCkKKwkJCQlkb3VibGVfcGFybSsrOworCQkJcG9saWN5Y2hhbmdlKys7CisJCQluZXdfcG9sLm1heCA9IHN0cmluZ190b19mcmVxdWVuY3kob3B0YXJnKTsKKwkJCWlmIChuZXdfcG9sLm1heCA9PSAwKSB7CisJCQkJcHJpbnRfdW5rbm93bl9hcmcoKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWlmIChmcmVxKQorCQkJCWRvdWJsZV9wYXJtKys7CisJCQlmcmVxID0gc3RyaW5nX3RvX2ZyZXF1ZW5jeShvcHRhcmcpOworCQkJaWYgKGZyZXEgPT0gMCkgeworCQkJCXByaW50X3Vua25vd25fYXJnKCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnZyc6CisJCQlpZiAobmV3X3BvbC5nb3Zlcm5vcikKKwkJCQlkb3VibGVfcGFybSsrOworCQkJcG9saWN5Y2hhbmdlKys7CisJCQlpZiAoKHN0cmxlbihvcHRhcmcpIDwgMykgfHwgKHN0cmxlbihvcHRhcmcpID4gMTgpKSB7CisJCQkJcHJpbnRfdW5rbm93bl9hcmcoKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCWlmICgoc3NjYW5mKG9wdGFyZywgIiVzIiwgZ292KSkgIT0gMSkgeworCQkJCXByaW50X3Vua25vd25fYXJnKCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisJCQluZXdfcG9sLmdvdmVybm9yID0gZ292OworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlKGNvbnQpOworCisJLyogcGFyYW1ldGVyIGNoZWNraW5nICovCisJaWYgKGRvdWJsZV9wYXJtKSB7CisJCXByaW50ZigidGhlIHNhbWUgcGFyYW1ldGVyIHdhcyBwYXNzZWQgbW9yZSB0aGFuIG9uY2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZnJlcSAmJiBwb2xpY3ljaGFuZ2UpIHsKKwkJcHJpbnRmKF8oInRoZSAtZi8tLWZyZXEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1kLy0tbWluLCAtdS8tLW1heCBvclxuIgorCQkJCSItZy8tLWdvdmVybm9yIHBhcmFtZXRlcnNcbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFmcmVxICYmICFwb2xpY3ljaGFuZ2UpIHsKKwkJcHJpbnRmKF8oIkF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3V0IG9mIC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4LCBhbmRcbiIKKwkJCQkiLWcvLS1nb3Zlcm5vciBtdXN0IGJlIHBhc3NlZFxuIikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBEZWZhdWx0IGlzOiBzZXQgYWxsIENQVXMgKi8KKwlpZiAoYml0bWFza19pc2FsbGNsZWFyKGNwdXNfY2hvc2VuKSkKKwkJYml0bWFza19zZXRhbGwoY3B1c19jaG9zZW4pOworCisJLyogQWxzbyBzZXQgZnJlcXVlbmN5IHNldHRpbmdzIGZvciByZWxhdGVkIENQVXMgaWYgLXIgaXMgcGFzc2VkICovCisJaWYgKHJlbGF0ZWQpIHsKKwkJZm9yIChjcHUgPSBiaXRtYXNrX2ZpcnN0KGNwdXNfY2hvc2VuKTsKKwkJICAgICBjcHUgPD0gYml0bWFza19sYXN0KGNwdXNfY2hvc2VuKTsgY3B1KyspIHsKKwkJCXN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmNwdXM7CisKKwkJCWlmICghYml0bWFza19pc2JpdHNldChjcHVzX2Nob3NlbiwgY3B1KSB8fAorCQkJICAgIGNwdWZyZXFfY3B1X2V4aXN0cyhjcHUpKQorCQkJCWNvbnRpbnVlOworCisJCQljcHVzID0gY3B1ZnJlcV9nZXRfcmVsYXRlZF9jcHVzKGNwdSk7CisJCQlpZiAoIWNwdXMpCisJCQkJYnJlYWs7CisJCQl3aGlsZSAoY3B1cy0+bmV4dCkgeworCQkJCWJpdG1hc2tfc2V0Yml0KGNwdXNfY2hvc2VuLCBjcHVzLT5jcHUpOworCQkJCWNwdXMgPSBjcHVzLT5uZXh0OworCQkJfQorCQkJY3B1ZnJlcV9wdXRfcmVsYXRlZF9jcHVzKGNwdXMpOworCQl9CisJfQorCisKKwkvKiBsb29wIG92ZXIgQ1BVcyAqLworCWZvciAoY3B1ID0gYml0bWFza19maXJzdChjcHVzX2Nob3Nlbik7CisJICAgICBjcHUgPD0gYml0bWFza19sYXN0KGNwdXNfY2hvc2VuKTsgY3B1KyspIHsKKwkJCisJCWlmICghYml0bWFza19pc2JpdHNldChjcHVzX2Nob3NlbiwgY3B1KSB8fAorCQkgICAgY3B1ZnJlcV9jcHVfZXhpc3RzKGNwdSkpCisJCQljb250aW51ZTsKKworCQlwcmludGYoXygiU2V0dGluZyBjcHU6ICVkXG4iKSwgY3B1KTsKKwkJcmV0ID0gZG9fb25lX2NwdShjcHUsICZuZXdfcG9sLCBmcmVxLCBwb2xpY3ljaGFuZ2UpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJaWYgKHJldCkKKwkJcHJpbnRfZXJyb3IoKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVpZGxlLWluZm8uYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdWlkbGUtaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNTQ2ODIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVpZGxlLWluZm8uYwpAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqICAoQykgMjAwNC0yMDA5ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqICAoQykgMjAxMCAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPGNwdWZyZXEuaD4KKworI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImhlbHBlcnMvc3lzZnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2JpdG1hc2suaCIKKworI2RlZmluZSBMSU5FX0xFTiAxMAorCitzdGF0aWMgdm9pZCBjcHVpZGxlX2NwdV9vdXRwdXQodW5zaWduZWQgaW50IGNwdSwgaW50IHZlcmJvc2UpCit7CisJaW50IGlkbGVzdGF0ZXMsIGlkbGVzdGF0ZTsKKwljaGFyICp0bXA7CisKKwlwcmludGYoXyAoIkFuYWx5emluZyBDUFUgJWQ6XG4iKSwgY3B1KTsKKworCWlkbGVzdGF0ZXMgPSBzeXNmc19nZXRfaWRsZXN0YXRlX2NvdW50KGNwdSk7CisJaWYgKGlkbGVzdGF0ZXMgPT0gMCkgeworCQlwcmludGYoXygiQ1BVICV1OiBObyBpZGxlIHN0YXRlc1xuIiksIGNwdSk7CisJCXJldHVybjsKKwl9CisJZWxzZSBpZiAoaWRsZXN0YXRlcyA8PSAwKSB7CisJCXByaW50ZihfKCJDUFUgJXU6IENhbid0IHJlYWQgaWRsZSBzdGF0ZSBpbmZvXG4iKSwgY3B1KTsKKwkJcmV0dXJuOworCX0KKwl0bXAgPSBzeXNmc19nZXRfaWRsZXN0YXRlX25hbWUoY3B1LCBpZGxlc3RhdGVzIC0gMSk7CisJaWYgKCF0bXApIHsKKwkJcHJpbnRmKF8oIkNvdWxkIG5vdCBkZXRlcm1pbmUgbWF4IGlkbGUgc3RhdGUgJXVcbiIpLAorCQkgICAgICAgaWRsZXN0YXRlcyAtIDEpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRmKF8oIk51bWJlciBvZiBpZGxlIHN0YXRlczogJWRcbiIpLCBpZGxlc3RhdGVzKTsKKworCXByaW50ZihfKCJBdmFpbGFibGUgaWRsZSBzdGF0ZXM6IikpOworCWZvciAoaWRsZXN0YXRlID0gMTsgaWRsZXN0YXRlIDwgaWRsZXN0YXRlczsgaWRsZXN0YXRlKyspIHsKKwkJdG1wID0gc3lzZnNfZ2V0X2lkbGVzdGF0ZV9uYW1lKGNwdSwgaWRsZXN0YXRlKTsKKwkJaWYgKCF0bXApCisJCQljb250aW51ZTsKKwkJcHJpbnRmKCIgJXMiLCB0bXApOworCQlmcmVlKHRtcCk7CisJfQorCXByaW50ZigiXG4iKTsKKworCWlmICghdmVyYm9zZSkKKwkJcmV0dXJuOworCisJZm9yIChpZGxlc3RhdGUgPSAxOyBpZGxlc3RhdGUgPCBpZGxlc3RhdGVzOyBpZGxlc3RhdGUrKykgeworCQl0bXAgPSBzeXNmc19nZXRfaWRsZXN0YXRlX25hbWUoY3B1LCBpZGxlc3RhdGUpOworCQlpZiAoIXRtcCkKKwkJCWNvbnRpbnVlOworCQlwcmludGYoIiVzOlxuIiwgdG1wKTsKKwkJZnJlZSh0bXApOworCisJCXRtcCA9IHN5c2ZzX2dldF9pZGxlc3RhdGVfZGVzYyhjcHUsIGlkbGVzdGF0ZSk7CisJCWlmICghdG1wKQorCQkJY29udGludWU7CisJCXByaW50ZihfKCJGbGFncy9EZXNjcmlwdGlvbjogJXNcbiIpLCB0bXApOworCQlmcmVlKHRtcCk7CisKKwkJcHJpbnRmKF8oIkxhdGVuY3k6ICVsdVxuIiksCisJCSAgICAgICBzeXNmc19nZXRfaWRsZXN0YXRlX2xhdGVuY3koY3B1LCBpZGxlc3RhdGUpKTsKKwkJcHJpbnRmKF8oIlVzYWdlOiAlbHVcbiIpLAorCQkgICAgICAgc3lzZnNfZ2V0X2lkbGVzdGF0ZV91c2FnZShjcHUsIGlkbGVzdGF0ZSkpOworCQlwcmludGYoXygiRHVyYXRpb246ICVsbHVcbiIpLAorCQkgICAgICAgc3lzZnNfZ2V0X2lkbGVzdGF0ZV90aW1lKGNwdSwgaWRsZXN0YXRlKSk7CisJfQorCXByaW50ZigiXG4iKTsKK30KKworc3RhdGljIHZvaWQgY3B1aWRsZV9nZW5lcmFsX291dHB1dCh2b2lkKQoreworCWNoYXIgKnRtcDsKKworCXRtcCA9IHN5c2ZzX2dldF9jcHVpZGxlX2RyaXZlcigpOworCWlmICghdG1wKSB7CisJCXByaW50ZihfKCJDb3VsZCBub3QgZGV0ZXJtaW5lIGNwdWlkbGUgZHJpdmVyXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGYoXygiQ1BVaWRsZSBkcml2ZXI6ICVzXG4iKSwgdG1wKTsKKwlmcmVlICh0bXApOworCisJdG1wID0gc3lzZnNfZ2V0X2NwdWlkbGVfZ292ZXJub3IoKTsKKwlpZiAoIXRtcCkgeworCQlwcmludGYoXygiQ291bGQgbm90IGRldGVybWluZSBjcHVpZGxlIGdvdmVybm9yXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGYoXygiQ1BVaWRsZSBnb3Zlcm5vcjogJXNcbiIpLCB0bXApOworCWZyZWUgKHRtcCk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2NfY3B1aWRsZV9jcHVfb3V0cHV0KHVuc2lnbmVkIGludCBjcHUpCit7CisJbG9uZyBtYXhfYWxsb3dlZF9jc3RhdGUgPSAyMDAwMDAwMDAwOworCWludCBjc3RhdGVzLCBjc3RhdGU7CisKKwljc3RhdGVzID0gc3lzZnNfZ2V0X2lkbGVzdGF0ZV9jb3VudChjcHUpOworCWlmIChjc3RhdGVzID09IDApIHsKKwkJLyoKKwkJICogR28gb24gYW5kIHByaW50IHNhbWUgdXNlbGVzcyBpbmZvIGFzIHlvdSdkIHNlZSB3aXRoCisJCSAqIGNhdCAvcHJvYy9hY3BpL3Byb2Nlc3Nvci8uLi9wb3dlcgorCQkgKglwcmludGYoXygiQ1BVICV1OiBObyBDLXN0YXRlcyBhdmFpbGFibGVcbiIpLCBjcHUpOworCQkgKglyZXR1cm47CisJCSAqLworCX0KKwllbHNlIGlmIChjc3RhdGVzIDw9IDApIHsKKwkJcHJpbnRmKF8oIkNQVSAldTogQ2FuJ3QgcmVhZCBDLXN0YXRlIGluZm9cbiIpLCBjcHUpOworCQlyZXR1cm47CisJfQorCS8qIHByaW50ZigiQ3N0YXRlczogJWRcbiIsIGNzdGF0ZXMpOyAqLworCisJcHJpbnRmKF8oImFjdGl2ZSBzdGF0ZTogICAgICAgICAgICBDMFxuIikpOworCXByaW50ZihfKCJtYXhfY3N0YXRlOiAgICAgICAgICAgICAgQyV1XG4iKSwgY3N0YXRlcy0xKTsKKwlwcmludGYoXygibWF4aW11bSBhbGxvd2VkIGxhdGVuY3k6ICVsdSB1c2VjXG4iKSwgbWF4X2FsbG93ZWRfY3N0YXRlKTsKKwlwcmludGYoXygic3RhdGVzOlx0XG4iKSk7CisJZm9yIChjc3RhdGUgPSAxOyBjc3RhdGUgPCBjc3RhdGVzOyBjc3RhdGUrKykgeworCQlwcmludGYoXygiICAgIEMlZDogICAgICAgICAgICAgICAgICAiCisJCQkgInR5cGVbQyVkXSAiKSwgY3N0YXRlLCBjc3RhdGUpOworCQlwcmludGYoXygicHJvbW90aW9uWy0tXSBkZW1vdGlvblstLV0gIikpOworCQlwcmludGYoXygibGF0ZW5jeVslMDNsdV0gIiksCisJCSAgICAgICBzeXNmc19nZXRfaWRsZXN0YXRlX2xhdGVuY3koY3B1LCBjc3RhdGUpKTsKKwkJcHJpbnRmKF8oInVzYWdlWyUwOGx1XSAiKSwKKwkJICAgICAgIHN5c2ZzX2dldF9pZGxlc3RhdGVfdXNhZ2UoY3B1LCBjc3RhdGUpKTsKKwkJcHJpbnRmKF8oImR1cmF0aW9uWyUwMjBMdV0gXG4iKSwKKwkJICAgICAgIHN5c2ZzX2dldF9pZGxlc3RhdGVfdGltZShjcHUsIGNzdGF0ZSkpOworCX0KK30KKworLyogLS1mcmVxIC8gLWYgKi8KKwordm9pZCBpZGxlX2luZm9faGVscCh2b2lkKSB7CisJcHJpbnRmKF8gKCJVc2FnZTogY3B1cG93ZXIgaWRsZWluZm8gW29wdGlvbnNdXG4iKSk7CisJcHJpbnRmKF8gKCJPcHRpb25zOlxuIikpOworCXByaW50ZihfICgiICAtcywgLS1zaWxlbnQgICAgICAgICBPbmx5IHNob3cgZ2VuZXJhbCBDLXN0YXRlIGluZm9ybWF0aW9uXG4iKSk7CisJcHJpbnRmKF8gKCIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvYWNwaS9wcm9jZXNzb3IvKi9wb3dlclxuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gb2xkZXIga2VybmVsc1xuIikpOworCXByaW50ZihfICgiICAtaCwgLS1oZWxwICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iKSk7CisKKwlwcmludGYoIlxuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGluZm9fb3B0c1tdID0geworCXsgLm5hbWU9InNpbGVudCIsCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0ncyd9LAorCXsgLm5hbWU9InByb2MiLAkJLmhhc19hcmc9bm9fYXJndW1lbnQsCQkuZmxhZz1OVUxMLAkudmFsPSdvJ30sCisJeyAubmFtZT0iaGVscCIsCQkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J2gnfSwKKwl7IH0sCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1aWRsZV9leGl0KGludCBmYWlsKQoreworCWlkbGVfaW5mb19oZWxwKCk7CisJZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitpbnQgY21kX2lkbGVfaW5mbyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKwlleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CisJaW50IHJldCA9IDAsIGNvbnQgPSAxLCBvdXRwdXRfcGFyYW0gPSAwLCB2ZXJib3NlID0gMTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gMDsKKworCWRvIHsKKwkJcmV0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImhvcyIsIGluZm9fb3B0cywgTlVMTCk7CisJCWlmIChyZXQgPT0gLTEpCisJCQlicmVhazsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAnPyc6CisJCQlvdXRwdXRfcGFyYW0gPSAnPyc7CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJCW91dHB1dF9wYXJhbSA9ICdoJzsKKwkJCWNvbnQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJdmVyYm9zZSA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAtMToKKwkJCWNvbnQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJ28nOgorCQkJaWYgKG91dHB1dF9wYXJhbSkgeworCQkJCW91dHB1dF9wYXJhbSA9IC0xOworCQkJCWNvbnQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJb3V0cHV0X3BhcmFtID0gcmV0OworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlKGNvbnQpOworCisJc3dpdGNoIChvdXRwdXRfcGFyYW0pIHsKKwljYXNlIC0xOgorCQlwcmludGYoXygiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSAiCisJCQkgIm91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIikpOworCQljcHVpZGxlX2V4aXQoRVhJVF9GQUlMVVJFKTsKKwljYXNlICc/JzoKKwkJcHJpbnRmKF8oImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIikpOworCQljcHVpZGxlX2V4aXQoRVhJVF9GQUlMVVJFKTsKKwljYXNlICdoJzoKKwkJY3B1aWRsZV9leGl0KEVYSVRfU1VDQ0VTUyk7CisJfQorCisJLyogRGVmYXVsdCBpczogc2hvdyBvdXRwdXQgb2YgQ1BVIDAgb25seSAqLworCWlmIChiaXRtYXNrX2lzYWxsY2xlYXIoY3B1c19jaG9zZW4pKQorCQliaXRtYXNrX3NldGJpdChjcHVzX2Nob3NlbiwgMCk7CisJCQorCWlmIChvdXRwdXRfcGFyYW0gPT0gMCkKKwkJY3B1aWRsZV9nZW5lcmFsX291dHB1dCgpOworCQkJCisJZm9yIChjcHUgPSBiaXRtYXNrX2ZpcnN0KGNwdXNfY2hvc2VuKTsKKwkgICAgIGNwdSA8PSBiaXRtYXNrX2xhc3QoY3B1c19jaG9zZW4pOyBjcHUrKykgeworCisJCWlmICghYml0bWFza19pc2JpdHNldChjcHVzX2Nob3NlbiwgY3B1KSB8fAorCQkgICAgY3B1ZnJlcV9jcHVfZXhpc3RzKGNwdSkpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKG91dHB1dF9wYXJhbSkgeworCisJCWNhc2UgJ28nOgorCQkJcHJvY19jcHVpZGxlX2NwdV9vdXRwdXQoY3B1KTsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQlwcmludGYoIlxuIik7CisJCQljcHVpZGxlX2NwdV9vdXRwdXQoY3B1LCB2ZXJib3NlKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiAoRVhJVF9TVUNDRVNTKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdXBvd2VyLWluZm8uYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdXBvd2VyLWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWRkMDRjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1cG93ZXItaW5mby5jCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogIChDKSAyMDExIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorCisjaW5jbHVkZSA8Y3B1ZnJlcS5oPgorI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImhlbHBlcnMvc3lzZnMuaCIKKwordm9pZCBpbmZvX2hlbHAodm9pZCkKK3sKKwlwcmludGYoXygiVXNhZ2U6IGNwdXBvd2VyIGluZm8gWyAtYiBdIFsgLW0gXSBbIC1zIF1cbiIpKTsKKwlwcmludGYoXygiT3B0aW9uczpcbiIpKTsKKwlwcmludGYoXygiICAtYiwgLS1wZXJmLWJpYXMgICAgR2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIpKTsKKwlwcmludGYoXygiICAtbSwgLS1zY2hlZC1tYyAgICAgR2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIikpOworCXByaW50ZihfKCIgIC1zLCAtLXNjaGVkLXNtdCAgICBHZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgcG9saWN5LlxuIikpOworCXByaW50ZihfKCIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iKSk7CisJcHJpbnRmKF8oIlxuUGFzc2luZyBubyBvcHRpb24gd2lsbCBzaG93IGFsbCBpbmZvLCBieSBkZWZhdWx0IG9ubHkgb24gY29yZSAwXG4iKSk7CisJcHJpbnRmKCJcbiIpOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBzZXRfb3B0c1tdID0geworCXsgLm5hbWU9InBlcmYtYmlhcyIsCS5oYXNfYXJnPW9wdGlvbmFsX2FyZ3VtZW50LAkuZmxhZz1OVUxMLAkudmFsPSdiJ30sCisJeyAubmFtZT0ic2NoZWQtbWMiLAkuaGFzX2FyZz1vcHRpb25hbF9hcmd1bWVudCwJLmZsYWc9TlVMTCwJLnZhbD0nbSd9LAorCXsgLm5hbWU9InNjaGVkLXNtdCIsCS5oYXNfYXJnPW9wdGlvbmFsX2FyZ3VtZW50LAkuZmxhZz1OVUxMLAkudmFsPSdzJ30sCisJeyAubmFtZT0iaGVscCIsCQkuaGFzX2FyZz1ub19hcmd1bWVudCwJCS5mbGFnPU5VTEwsCS52YWw9J2gnfSwKKwl7IH0sCit9OworCitzdGF0aWMgdm9pZCBwcmludF93cm9uZ19hcmdfZXhpdCh2b2lkKQoreworCXByaW50ZihfKCJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIpKTsKKwlpbmZvX2hlbHAoKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKK2ludCBjbWRfaW5mbyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKwlleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CisJdW5zaWduZWQgaW50IGNwdTsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCWludCBzY2hlZF9tYzoxOworCQkJaW50IHNjaGVkX3NtdDoxOworCQkJaW50IHBlcmZfYmlhczoxOworCQl9OworCQlpbnQgcGFyYW1zOworCQkJCisJfSBwYXJhbXMgPSB7fTsKKwlpbnQgcmV0ID0gMDsKKworCXNldGxvY2FsZShMQ19BTEwsICIiKTsKKwl0ZXh0ZG9tYWluIChQQUNLQUdFKTsKKworCS8qIHBhcmFtZXRlciBwYXJzaW5nICovCisJd2hpbGUgKChyZXQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAibXNiaCIsIHNldF9vcHRzLCBOVUxMKSkgIT0gLTEpIHsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAnaCc6CisJCQlpbmZvX2hlbHAoKTsKKwkJCXJldHVybiAwOworCQljYXNlICdiJzoKKwkJCWlmIChwYXJhbXMucGVyZl9iaWFzKQorCQkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCQlwYXJhbXMucGVyZl9iaWFzID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCWlmIChwYXJhbXMuc2NoZWRfbWMpCisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCXBhcmFtcy5zY2hlZF9tYyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlpZiAocGFyYW1zLnNjaGVkX3NtdCkKKwkJCQlwcmludF93cm9uZ19hcmdfZXhpdCgpOworCQkJcGFyYW1zLnNjaGVkX3NtdCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCX0KKwl9OworCisJaWYgKCFwYXJhbXMucGFyYW1zKQorCQlwYXJhbXMucGFyYW1zID0gMHg3OworCisJLyogRGVmYXVsdCBpczogc2hvdyBvdXRwdXQgb2YgQ1BVIDAgb25seSAqLworCWlmIChiaXRtYXNrX2lzYWxsY2xlYXIoY3B1c19jaG9zZW4pKQorCQliaXRtYXNrX3NldGJpdChjcHVzX2Nob3NlbiwgMCk7CisKKwlpZiAocGFyYW1zLnNjaGVkX21jKSB7CisJCXJldCA9IHN5c2ZzX2dldF9zY2hlZCgibWMiKTsKKwkJcHJpbnRmKF8oIlN5c3RlbSdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHNldHRpbmc6ICIpKTsKKwkJaWYgKHJldCA8IDApCisJCQkvKiBpZiBzeXNmcyBmaWxlIGlzIG1pc3NpbmcgaXQnczogZXJybm8gPT0gRU5PRU5UICovCisJCQlwcmludGYoXygibm90IHN1cHBvcnRlZFxuIikpOworCQllbHNlCisJCQlwcmludGYoIiVkXG4iLCByZXQpOworCX0JCQkKKwlpZiAocGFyYW1zLnNjaGVkX3NtdCkgeworCQlyZXQgPSBzeXNmc19nZXRfc2NoZWQoInNtdCIpOworCQlwcmludGYoXygiU3lzdGVtJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHNldHRpbmc6ICIpKTsKKwkJaWYgKHJldCA8IDApCisJCQkvKiBpZiBzeXNmcyBmaWxlIGlzIG1pc3NpbmcgaXQnczogZXJybm8gPT0gRU5PRU5UICovCisJCQlwcmludGYoXygibm90IHN1cHBvcnRlZFxuIikpOworCQllbHNlCisJCQlwcmludGYoIiVkXG4iLCByZXQpOworCX0KKworCS8qIEFkZCBtb3JlIHBlciBjcHUgb3B0aW9ucyBoZXJlICovCisJaWYgKCFwYXJhbXMucGVyZl9iaWFzKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHBhcmFtcy5wZXJmX2JpYXMpIHsKKwkJaWYgKCFydW5fYXNfcm9vdCkgeworCQkJcGFyYW1zLnBlcmZfYmlhcyA9IDA7CisJCQlwcmludGYgKF8oIkludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIikpOworCQl9IGVsc2UgaWYgKCEoY3B1cG93ZXJfY3B1X2luZm8uY2FwcyAmIENQVVBPV0VSX0NBUF9QRVJGX0JJQVMpKSB7CisJCQlwcmludGYoXygiU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgSW50ZWwncyBwZXJmb3JtYW5jZSIKKwkJCQkgIiBiaWFzIHNldHRpbmdcbiIpKTsKKwkJCXBhcmFtcy5wZXJmX2JpYXMgPSAwOworCQl9CisJfQorCisJLyogbG9vcCBvdmVyIENQVXMgKi8KKwlmb3IgKGNwdSA9IGJpdG1hc2tfZmlyc3QoY3B1c19jaG9zZW4pOworCSAgICAgY3B1IDw9IGJpdG1hc2tfbGFzdChjcHVzX2Nob3Nlbik7IGNwdSsrKSB7CisJCQorCQlpZiAoIWJpdG1hc2tfaXNiaXRzZXQoY3B1c19jaG9zZW4sIGNwdSkgfHwKKwkJICAgIGNwdWZyZXFfY3B1X2V4aXN0cyhjcHUpKQorCQkJY29udGludWU7CisKKwkJcHJpbnRmKF8oImFuYWx5emluZyBDUFUgJWQ6XG4iKSwgY3B1KTsKKworCQlpZiAocGFyYW1zLnBlcmZfYmlhcykgeworCQkJcmV0ID0gbXNyX2ludGVsX2dldF9wZXJmX2JpYXMoY3B1KTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJcHJpbnRmKF8oIkNvdWxkIG5vdCByZWFkIHBlcmYtYmlhcyB2YWx1ZVxuIikpOworCQkJCWJyZWFrOworCQkJfSBlbHNlCisJCQkJcHJpbnRmKF8oInBlcmYtYmlhczogJWRcbiIpLCByZXQpOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci1zZXQuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdXBvd2VyLXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODA3YmMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci1zZXQuYwpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqICAoQykgMjAxMSBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKworI2luY2x1ZGUgPGNwdWZyZXEuaD4KKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL3N5c2ZzLmgiCisjaW5jbHVkZSAiaGVscGVycy9iaXRtYXNrLmgiCisKK3ZvaWQgc2V0X2hlbHAodm9pZCkKK3sKKwlwcmludGYoXygiVXNhZ2U6IGNwdXBvd2VyIHNldCBbIC1iIHZhbCBdIFsgLW0gdmFsIF0gWyAtcyB2YWwgXVxuIikpOworCXByaW50ZihfKCJPcHRpb25zOlxuIikpOworCXByaW50ZihfKCIgIC1iLCAtLXBlcmYtYmlhcyBbVkFMXSAgICBTZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisJICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbCBtb2RlbHMgWzAtMTVdLCBzZWUgbWFucGFnZSBmb3IgZGV0YWlsc1xuIikpOworCXByaW50ZihfKCIgIC1tLCAtLXNjaGVkLW1jICBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBwb2xpY3kuXG4iKSk7CisJcHJpbnRmKF8oIiAgLXMsIC0tc2NoZWQtc210IFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBwb2xpY3kuXG4iKSk7CisJcHJpbnRmKF8oIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIpKTsKKwlwcmludGYoIlxuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIHNldF9vcHRzW10gPSB7CisJeyAubmFtZT0icGVyZi1iaWFzIiwJLmhhc19hcmc9b3B0aW9uYWxfYXJndW1lbnQsCS5mbGFnPU5VTEwsCS52YWw9J2InfSwKKwl7IC5uYW1lPSJzY2hlZC1tYyIsCS5oYXNfYXJnPW9wdGlvbmFsX2FyZ3VtZW50LAkuZmxhZz1OVUxMLAkudmFsPSdtJ30sCisJeyAubmFtZT0ic2NoZWQtc210IiwJLmhhc19hcmc9b3B0aW9uYWxfYXJndW1lbnQsCS5mbGFnPU5VTEwsCS52YWw9J3MnfSwKKwl7IC5uYW1lPSJoZWxwIiwJCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkJLmZsYWc9TlVMTCwJLnZhbD0naCd9LAorCXsgfSwKK307CisKK3N0YXRpYyB2b2lkIHByaW50X3dyb25nX2FyZ19leGl0KHZvaWQpCit7CisJcHJpbnRmKF8oImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIikpOworCXNldF9oZWxwKCk7CisJZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitpbnQgY21kX3NldChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKwlleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CisJdW5zaWduZWQgaW50IGNwdTsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCWludCBzY2hlZF9tYzoxOworCQkJaW50IHNjaGVkX3NtdDoxOworCQkJaW50IHBlcmZfYmlhczoxOworCQl9OworCQlpbnQgcGFyYW1zOworCQkJCisJfSBwYXJhbXM7CisJaW50IHNjaGVkX21jID0gMCwgc2NoZWRfc210ID0gMCwgcGVyZl9iaWFzID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCXNldGxvY2FsZShMQ19BTEwsICIiKTsKKwl0ZXh0ZG9tYWluIChQQUNLQUdFKTsKKworCXBhcmFtcy5wYXJhbXMgPSAwOworCS8qIHBhcmFtZXRlciBwYXJzaW5nICovCisJd2hpbGUgKChyZXQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAibTpzOmI6aCIsIHNldF9vcHRzLCBOVUxMKSkgIT0gLTEpIHsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAnaCc6CisJCQlzZXRfaGVscCgpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgJ2InOgorCQkJaWYgKHBhcmFtcy5wZXJmX2JpYXMpCisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCXBlcmZfYmlhcyA9IGF0b2kob3B0YXJnKTsKKwkJCWlmIChwZXJmX2JpYXMgPCAwIHx8IHBlcmZfYmlhcyA+IDE1KSB7CisJCQkJcHJpbnRmKF8oIi0tcGVyZi1iaWFzIHBhcmFtIG91dCAiCisJCQkJCSAib2YgcmFuZ2UgWzAtJWRdXG4iKSwgMTUpOworCQkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCQl9CisJCQlwYXJhbXMucGVyZl9iaWFzID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCWlmIChwYXJhbXMuc2NoZWRfbWMpCisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCXNjaGVkX21jID0gYXRvaShvcHRhcmcpOworCQkJaWYgKHNjaGVkX21jIDwgMCB8fCBzY2hlZF9tYyA+IDIpIHsKKwkJCQlwcmludGYoXygiLS1zY2hlZC1tYyBwYXJhbSBvdXQgIgorCQkJCQkgIm9mIHJhbmdlIFswLSVkXVxuIiksIDIpOworCQkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCQl9CisJCQlwYXJhbXMuc2NoZWRfbWMgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJaWYgKHBhcmFtcy5zY2hlZF9zbXQpCisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCXNjaGVkX3NtdCA9IGF0b2kob3B0YXJnKTsKKwkJCWlmIChzY2hlZF9zbXQgPCAwIHx8IHNjaGVkX3NtdCA+IDIpIHsKKwkJCQlwcmludGYoXygiLS1zY2hlZC1zbXQgcGFyYW0gb3V0ICIKKwkJCQkJICJvZiByYW5nZSBbMC0lZF1cbiIpLCAyKTsKKwkJCQlwcmludF93cm9uZ19hcmdfZXhpdCgpOworCQkJfQorCQkJcGFyYW1zLnNjaGVkX3NtdCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCX0KKwl9OworCisJaWYgKCFwYXJhbXMucGFyYW1zKSB7CisJCXNldF9oZWxwKCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwYXJhbXMuc2NoZWRfbWMpIHsKKwkJcmV0ID0gc3lzZnNfc2V0X3NjaGVkKCJtYyIsIHNjaGVkX21jKTsKKwkJaWYgKHJldCkKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJFcnJvciBzZXR0aW5nIHNjaGVkLW1jICVzXG4iKSwKKwkJCQkocmV0ID09IC1FTk9ERVYpID8gIm5vdCBzdXBwb3J0ZWQiIDogIiIpOworCX0KKwlpZiAocGFyYW1zLnNjaGVkX3NtdCkgeworCQlyZXQgPSBzeXNmc19zZXRfc2NoZWQoInNtdCIsIHNjaGVkX3NtdCk7CisJCWlmIChyZXQpCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiRXJyb3Igc2V0dGluZyBzY2hlZC1zbXQgJXNcbiIpLAorCQkJCShyZXQgPT0gLUVOT0RFVikgPyAibm90IHN1cHBvcnRlZCIgOiAiIik7CisJfQorCisJLyogRGVmYXVsdCBpczogc2V0IGFsbCBDUFVzICovCisJaWYgKGJpdG1hc2tfaXNhbGxjbGVhcihjcHVzX2Nob3NlbikpCisJCWJpdG1hc2tfc2V0YWxsKGNwdXNfY2hvc2VuKTsKKworCS8qIGxvb3Agb3ZlciBDUFVzICovCisJZm9yIChjcHUgPSBiaXRtYXNrX2ZpcnN0KGNwdXNfY2hvc2VuKTsKKwkgICAgIGNwdSA8PSBiaXRtYXNrX2xhc3QoY3B1c19jaG9zZW4pOyBjcHUrKykgeworCQkKKwkJaWYgKCFiaXRtYXNrX2lzYml0c2V0KGNwdXNfY2hvc2VuLCBjcHUpIHx8CisJCSAgICBjcHVmcmVxX2NwdV9leGlzdHMoY3B1KSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwYXJhbXMucGVyZl9iaWFzKSB7CisJCQlyZXQgPSBtc3JfaW50ZWxfc2V0X3BlcmZfYmlhcyhjcHUsIHBlcmZfYmlhcyk7CisJCQlpZiAocmV0KSB7CisJCQkJZnByaW50ZihzdGRlcnIsIF8oIkVycm9yIHNldHRpbmcgcGVyZi1iaWFzICIKKwkJCQkJCSAgInZhbHVlIG9uIENQVSAlZFxuIiksIGNwdSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdXBvd2VyLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNDhlNTUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci5jCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogIChDKSAyMDEwLDIwMTEgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiAgSWRlYXMgdGFrZW4gb3ZlciBmcm9tIHRoZSBwZXJmIHVzZXJzcGFjZSB0b29sIChpbmNsdWRlZCBpbiB0aGUgTGludXMKKyAqICBrZXJuZWwgZ2l0IHJlcG8pOiBzdWJjb21tYW5kIGJ1aWx0aW5zIGFuZCBwYXJhbSBwYXJzaW5nLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImhlbHBlcnMvYml0bWFzay5oIgorCitzdHJ1Y3QgY21kX3N0cnVjdCB7CisJY29uc3QgY2hhciAqY21kOworCWludCAoKm1haW4pKGludCwgY29uc3QgY2hhciAqKik7CisJdm9pZCAoKnVzYWdlKSh2b2lkKTsKKwlpbnQgbmVlZHNfcm9vdDsKK307CisKKyNkZWZpbmUgQVJSQVlfU0laRSh4KSAoc2l6ZW9mKHgpL3NpemVvZih4WzBdKSkKKworaW50IGNtZF9oZWxwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CisKKy8qIEdsb2JhbCBjcHVfaW5mbyBvYmplY3QgYXZhaWxhYmxlIGZvciBhbGwgYmluYXJpZXMKKyAqIEluZm8gb25seSByZXRyaWV2ZWQgZnJvbSBDUFUgMAorICoKKyAqIFZhbHVlcyB3aWxsIGJlIHplcm8vdW5rbm93biBvbiBub24gWDg2IGFyY2hzCisgKi8KK3N0cnVjdCBjcHVwb3dlcl9jcHVfaW5mbyBjcHVwb3dlcl9jcHVfaW5mbzsKK2ludCBydW5fYXNfcm9vdDsKKy8qIEFmZmVjdGVkIGNwdXMgY2hvc2VuIGJ5IC1jLy0tY3B1IHBhcmFtICovCitzdHJ1Y3QgYml0bWFzayAqY3B1c19jaG9zZW47CisKKyNpZmRlZiBERUJVRworaW50IGJlX3ZlcmJvc2U7CisjZW5kaWYKKworc3RhdGljIHZvaWQgcHJpbnRfaGVscCh2b2lkKTsKKworc3RhdGljIHN0cnVjdCBjbWRfc3RydWN0IGNvbW1hbmRzW10gPSB7CisJeyAiZnJlcXVlbmN5LWluZm8iLAljbWRfZnJlcV9pbmZvLAlmcmVxX2luZm9faGVscCwJMAl9LAorCXsgImZyZXF1ZW5jeS1zZXQiLAljbWRfZnJlcV9zZXQsCWZyZXFfc2V0X2hlbHAsCTEJfSwKKwl7ICJpZGxlLWluZm8iLAkJY21kX2lkbGVfaW5mbywJaWRsZV9pbmZvX2hlbHAsCTAJfSwKKwl7ICJzZXQiLAkJY21kX3NldCwJc2V0X2hlbHAsCTEJfSwKKwl7ICJpbmZvIiwJCWNtZF9pbmZvLAlpbmZvX2hlbHAsCTAJfSwKKwl7ICJtb25pdG9yIiwJCWNtZF9tb25pdG9yLAltb25pdG9yX2hlbHAsCTAJfSwKKwl7ICJoZWxwIiwJCWNtZF9oZWxwLAlwcmludF9oZWxwLAkJMAl9LAorCS8vCXsgImJlbmNoIiwJY21kX2JlbmNoLAlOVUxMLAkJMQl9LAorfTsKKworaW50IGNtZF9oZWxwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChhcmdjID4gMSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tYW5kcyk7IGkrKykgeworCQkJc3RydWN0IGNtZF9zdHJ1Y3QgKnAgPSBjb21tYW5kcyArIGk7CisJCQlpZiAoc3RyY21wKHAtPmNtZCwgYXJndlsxXSkpCisJCQkJY29udGludWU7CisJCQlpZiAocC0+dXNhZ2UpIHsKKwkJCQlwLT51c2FnZSgpOworCQkJCXJldHVybiBFWElUX1NVQ0NFU1M7CisJCQl9CisJCX0KKwl9CisJcHJpbnRfaGVscCgpOworCWlmIChhcmdjID09IDEpCisJCXJldHVybiBFWElUX1NVQ0NFU1M7IC8qIGNwdXBvd2VyIGhlbHAgKi8KKwlyZXR1cm4gRVhJVF9GQUlMVVJFOworfQorCitzdGF0aWMgdm9pZCBwcmludF9oZWxwKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKyNpZmRlZiBERUJVRworCXByaW50ZihfKCJjcHVwb3dlciBbIC1kIF1bIC1jIGNwdWxpc3QgXSBzdWJjb21tYW5kIFtBUkdTXVxuIikpOworCXByaW50ZihfKCIgIC1kLCAtLWRlYnVnICAgICAgTWF5IGluY3JlYXNlIG91dHB1dCAoc3RkZXJyKSBvbiBzb21lIHN1YmNvbW1hbmRzXG4iKSk7CisjZWxzZQorCXByaW50ZihfKCJjcHVwb3dlciBbIC1jIGNwdWxpc3QgXSBzdWJjb21tYW5kIFtBUkdTXVxuIikpOworI2VuZGlmCisJcHJpbnRmKF8oImNwdXBvd2VyIC0tdmVyc2lvblxuIikpOworCXByaW50ZihfKCJTdXBwb3J0ZWQgc3ViY29tbWFuZHMgYXJlOlxuIikpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1hbmRzKTsgaSsrKQorCQlwcmludGYoIlx0JXNcbiIsIGNvbW1hbmRzW2ldLmNtZCk7CisJcHJpbnRmKF8oIlxuU29tZSBzdWJjb21tYW5kcyBjYW4gbWFrZSB1c2Ugb2YgdGhlIC1jIGNwdWxpc3Qgb3B0aW9uLlxuIikpOworCXByaW50ZihfKCJMb29rIGF0IHRoZSBnZW5lcmFsIGNwdXBvd2VyIG1hbnBhZ2UgaG93IHRvIHVzZSBpdFxuIikpOworCXByaW50ZihfKCJhbmQgcmVhZCB1cCB0aGUgc3ViY29tbWFuZCdzIG1hbnBhZ2Ugd2hldGhlciBpdCBpcyBzdXBwb3J0ZWQuXG4iKSk7CisJcHJpbnRmKF8oIlxuVXNlIGNwdXBvd2VyIGhlbHAgc3ViY29tbWFuZCBmb3IgZ2V0dGluZyBoZWxwIGZvciBhYm92ZSBzdWJjb21tYW5kcy5cbiIpKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfdmVyc2lvbih2b2lkKSB7CisgICAgICAgIHByaW50ZihQQUNLQUdFICIgIiBWRVJTSU9OICJcbiIpOworCXByaW50ZihfKCJSZXBvcnQgZXJyb3JzIGFuZCBidWdzIHRvICVzLCBwbGVhc2UuXG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfb3B0aW9ucyhpbnQgKmFyZ2MsIGNvbnN0IGNoYXIgKioqYXJndikKK3sKKwlpbnQgcmV0LCB4LCBuZXdfYXJnYyA9IDA7CisKKwlpZiAoKmFyZ2MgPCAxKQorCQlyZXR1cm47CisKKwlmb3IgKHggPSAwOyAgeCA8ICphcmdjICYmICgoKmFyZ3YpW3hdKVswXSA9PSAnLSc7IHgrKykgeworCQljb25zdCBjaGFyICpwYXJhbSA9ICgqYXJndilbeF07CisJCWlmICghc3RyY21wKHBhcmFtLCAiLWgiKSB8fCAhc3RyY21wKHBhcmFtLCAiLS1oZWxwIikpeworCQkJcHJpbnRfaGVscCgpOworCQkJZXhpdChFWElUX1NVQ0NFU1MpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAocGFyYW0sICItYyIpIHx8ICFzdHJjbXAocGFyYW0sICItLWNwdSIpKXsKKwkJCWlmICgqYXJnYyA8IDIpIHsKKwkJCQlwcmludF9oZWxwKCk7CisJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJfQorCQkJaWYgKCFzdHJjbXAoKCphcmd2KVt4KzFdLCAiYWxsIikpCisJCQkJYml0bWFza19zZXRhbGwoY3B1c19jaG9zZW4pOworCQkJZWxzZSB7CisJCQkJcmV0ID0gYml0bWFza19wYXJzZWxpc3QoCisJCQkJCQkoKmFyZ3YpW3grMV0sIGNwdXNfY2hvc2VuKTsKKwkJCQlpZiAocmV0IDwgMCkgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwgXygiRXJyb3IgcGFyc2luZyBjcHUgIgorCQkJCQkJCSAgImxpc3RcbiIpKTsKKwkJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJCX0KKwkJCX0KKwkJCXggKz0gMTsKKwkJCS8qIEN1dCBvdXQgcGFyYW06IGNwdXBvd2VyIC1jIDEgaW5mbyAtPiBjcHVwb3dlciBpbmZvICovCisJCQluZXdfYXJnYyArPSAyOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChwYXJhbSwgIi12IikgfHwgIXN0cmNtcChwYXJhbSwgIi0tdmVyc2lvbiIpKXsKKwkJCXByaW50X3ZlcnNpb24oKTsKKwkJCWV4aXQoRVhJVF9TVUNDRVNTKTsKKyNpZmRlZiBERUJVRworCQl9IGVsc2UgaWYgKCFzdHJjbXAocGFyYW0sICItZCIpIHx8ICFzdHJjbXAocGFyYW0sICItLWRlYnVnIikpeworCQkJYmVfdmVyYm9zZSA9IDE7CisJCQluZXdfYXJnYyArKzsKKwkJCWNvbnRpbnVlOworI2VuZGlmCisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gb3B0aW9uOiAlc1xuIiwgcGFyYW0pOworCQkJcHJpbnRfaGVscCgpOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQl9CisJfQorCSphcmdjIC09IG5ld19hcmdjOworCSphcmd2ICs9IG5ld19hcmdjOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQoreworCWNvbnN0IGNoYXIgKmNtZDsKKwl1bnNpZ25lZCBpbnQgaSwgcmV0OworCisJY3B1c19jaG9zZW4gPSBiaXRtYXNrX2FsbG9jKHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX0NPTkYpKTsKKworCWFyZ2MtLTsKKwlhcmd2ICs9IDE7CisKKwloYW5kbGVfb3B0aW9ucygmYXJnYywgJmFyZ3YpOworCisJY21kID0gYXJndlswXTsKKworCWlmIChhcmdjIDwgMSkgeworCQlwcmludF9oZWxwKCk7CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCisJc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCXRleHRkb21haW4gKFBBQ0tBR0UpOworCisJLyogVHVybiAicGVyZiBjbWQgLS1oZWxwIiBpbnRvICJwZXJmIGhlbHAgY21kIiAqLworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLWhlbHAiKSkgeworCQlhcmd2WzFdID0gYXJndlswXTsKKwkJYXJndlswXSA9IGNtZCA9ICJoZWxwIjsKKwl9CisKKwlnZXRfY3B1X2luZm8oMCwgJmNwdXBvd2VyX2NwdV9pbmZvKTsKKwlydW5fYXNfcm9vdCA9ICFnZXR1aWQoKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1hbmRzKTsgaSsrKSB7CisJCXN0cnVjdCBjbWRfc3RydWN0ICpwID0gY29tbWFuZHMgKyBpOworCQlpZiAoc3RyY21wKHAtPmNtZCwgY21kKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXJ1bl9hc19yb290ICYmIHAtPm5lZWRzX3Jvb3QpIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJTdWJjb21tYW5kICVzIG5lZWRzIHJvb3QgIgorCQkJCQkgICJwcml2aWxlZ2VzXG4iKSwgY21kKTsKKwkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJCX0KKwkJcmV0ID0gcC0+bWFpbihhcmdjLCBhcmd2KTsKKwkJaWYgKGNwdXNfY2hvc2VuKQorCQkJYml0bWFza19mcmVlKGNwdXNfY2hvc2VuKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcHJpbnRfaGVscCgpOworCXJldHVybiBFWElUX0ZBSUxVUkU7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2FtZC5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9hbWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQ0ZTMxZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvYW1kLmMKQEAgLTAsMCArMSwxMzcgQEAKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSA8cGNpL3BjaS5oPgorCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisKKyNkZWZpbmUgTVNSX0FNRF9QU1RBVEVfU1RBVFVTCTB4YzAwMTAwNjMKKyNkZWZpbmUgTVNSX0FNRF9QU1RBVEUJCTB4YzAwMTAwNjQKKyNkZWZpbmUgTVNSX0FNRF9QU1RBVEVfTElNSVQJMHhjMDAxMDA2MQorCit1bmlvbiBtc3JfcHN0YXRlIHsKKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBmaWQ6NjsKKwkJdW5zaWduZWQgZGlkOjM7CisJCXVuc2lnbmVkIHZpZDo3OworCQl1bnNpZ25lZCByZXMxOjY7CisJCXVuc2lnbmVkIG5iZGlkOjE7CisJCXVuc2lnbmVkIHJlczI6MjsKKwkJdW5zaWduZWQgbmJ2aWQ6NzsKKwkJdW5zaWduZWQgaWRkdmFsOjg7CisJCXVuc2lnbmVkIGlkZGRpdjoyOworCQl1bnNpZ25lZCByZXMzOjIxOworCQl1bnNpZ25lZCBlbjoxOworCX0gYml0czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworfTsKKworc3RhdGljIGludCBnZXRfZGlkKGludCBmYW1pbHksIHVuaW9uIG1zcl9wc3RhdGUgcHN0YXRlKQoreworCWludCB0OworCisJaWYgKGZhbWlseSA9PSAweDEyKQorCQl0ID0gcHN0YXRlLnZhbCAmIDB4ZjsKKwllbHNlCisJCXQgPSBwc3RhdGUuYml0cy5kaWQ7CisKKwlyZXR1cm4gdDsKK30KKworc3RhdGljIGludCBnZXRfY29mKGludCBmYW1pbHksIHVuaW9uIG1zcl9wc3RhdGUgcHN0YXRlKQoreworCWludCB0OworCWludCBmaWQsIGRpZDsKKworCWRpZCA9IGdldF9kaWQoZmFtaWx5LCBwc3RhdGUpOworCisJdCA9IDB4MTA7CisJZmlkID0gcHN0YXRlLmJpdHMuZmlkOworCWlmIChmYW1pbHkgPT0gMHgxMSkKKwkJdCA9IDB4ODsKKworCXJldHVybiAoKDEwMCAqIChmaWQgKyB0KSkgPj4gZGlkKTsKKyB9CisKKy8qIE5lZWRzOgorICogY3B1ICAgICAgICAgIC0+IHRoZSBjcHUgdGhhdCBnZXRzIGV2YWx1YXRlZAorICogY3B1X2ZhbWlseSAgIC0+IFRoZSBjcHUncyBmYW1pbHkgKDB4MTAsIDB4MTIsLi4uKQorICogYm9vdHNfc3RhdGVzIC0+IGhvdyBtdWNoIGJvb3N0IHN0YXRlcyB0aGUgbWFjaGluZXMgc3VwcG9ydAorICoKKyAqIEZpbGxzIHVwOgorICogcHN0YXRlcyAtPiBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2Ygc2l6ZSBNQVhfSFdfUFNUQVRFUworICogICAgICAgICAgICBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggemVyb3MuCisgKiAgICAgICAgICAgIEFsbCBhdmFpbGFibGUgIEhXIHBzdGF0ZXMgKGluY2x1ZGluZyBib29zdCBzdGF0ZXMpCisgKiBubyAgICAgIC0+IGFtb3VudCBvZiBwc3RhdGVzIGFib3ZlIGFycmF5IGdvdCBmaWxsZWQgdXAgd2l0aAorICoKKyAqIHJldHVybnMgemVybyBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlCisgKi8KK2ludCBkZWNvZGVfcHN0YXRlcyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgY3B1X2ZhbWlseSwKKwkJICAgaW50IGJvb3N0X3N0YXRlcywgdW5zaWduZWQgbG9uZyAqcHN0YXRlcywgaW50ICpubykKK3sKKwlpbnQgaSwgcHNtYXgsIHBzY3VyOworCXVuaW9uIG1zcl9wc3RhdGUgcHN0YXRlOworICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCisJLyogT25seSByZWFkIG91dCBmcmVxdWVuY2llcyBmcm9tIEhXIHdoZW4gQ1BVIG1pZ2h0IGJlIGJvb3N0YWJsZQorCSAgIHRvIGtlZXAgdGhlIGNvZGUgYXMgc2hvcnQgYW5kIGNsZWFuIGFzIHBvc3NpYmxlLgorCSAgIE90aGVyd2lzZSBmcmVxdWVuY2llcyBhcmUgZXhwb3J0ZWQgdmlhIEFDUEkgdGFibGVzLgorCSovCisJaWYgKGNwdV9mYW1pbHkgPCAweDEwIHx8IGNwdV9mYW1pbHkgPT0gMHgxNCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHJlYWRfbXNyKGNwdSwgTVNSX0FNRF9QU1RBVEVfTElNSVQsICZ2YWwpKQorCQlyZXR1cm4gLTE7CisKKwlwc21heCA9ICh2YWwgPj4gNCkgJiAweDc7CisKKwlpZiAocmVhZF9tc3IoY3B1LCBNU1JfQU1EX1BTVEFURV9TVEFUVVMsICZ2YWwpKQorCQlyZXR1cm4gLTE7CisKKwlwc2N1ciA9IHZhbCAmIDB4NzsKKworCXBzY3VyICs9IGJvb3N0X3N0YXRlczsKKwlwc21heCArPSBib29zdF9zdGF0ZXM7CisJZm9yIChpPTA7IGk8PXBzbWF4OyBpKyspIHsKKwkJaWYgKGkgPj0gTUFYX0hXX1BTVEFURVMpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiSFcgcHN0YXRlcyBbJWRdIGV4Y2VlZGluZyBtYXggWyVkXVxuIiwKKwkJCQlwc21heCwgTUFYX0hXX1BTVEFURVMpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmIChyZWFkX21zcihjcHUsIE1TUl9BTURfUFNUQVRFICsgaSwgJnBzdGF0ZS52YWwpKQorCQkJcmV0dXJuIC0xOworCQlwc3RhdGVzW2ldID0gZ2V0X2NvZihjcHVfZmFtaWx5LCBwc3RhdGUpOworCX0KKwkqbm8gPSBpOworCXJldHVybiAwOworfQorCitpbnQgYW1kX3BjaV9nZXRfbnVtX2Jvb3N0X3N0YXRlcyhpbnQgKmFjdGl2ZSwgaW50ICpzdGF0ZXMpCit7CisJc3RydWN0IHBjaV9hY2Nlc3MgKnBjaV9hY2M7CisJaW50IHZlbmRvcl9pZCA9IDB4MTAyMjsKKwlpbnQgYm9vc3RfZGV2X2lkc1s0XSA9IHsweDEyMDQsIDB4MTYwNCwgMHgxNzA0LCAwfTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2aWNlOworCXVpbnQ4X3QgdmFsID0gMDsKKworCSphY3RpdmUgPSAqc3RhdGVzID0gMDsKKworCWRldmljZSA9IHBjaV9hY2NfaW5pdCgmcGNpX2FjYywgdmVuZG9yX2lkLCBib29zdF9kZXZfaWRzKTsKKworCWlmIChkZXZpY2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl2YWwgPSBwY2lfcmVhZF9ieXRlKGRldmljZSwgMHgxNWMpOworCWlmICh2YWwgJiAzKQorCQkqYWN0aXZlID0gMTsKKwllbHNlCisJCSphY3RpdmUgPSAwOworCSpzdGF0ZXMgPSAodmFsID4+IDIpICYgNzsKKworCXBjaV9jbGVhbnVwKHBjaV9hY2MpOworCXJldHVybiAwOworfQorI2VuZGlmIC8qIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvYml0bWFzay5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9iaXRtYXNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBmNGQ2OQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvYml0bWFzay5jCkBAIC0wLDAgKzEsMjkwIEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGhlbHBlcnMvYml0bWFzay5oPgorCisvKiBIb3cgbWFueSBiaXRzIGluIGFuIHVuc2lnbmVkIGxvbmcgKi8KKyNkZWZpbmUgYml0c3BlcmxvbmcgKDggKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisKKy8qIGhvd21hbnkoYSxiKSA6IGhvdyBtYW55IGVsZW1lbnRzIG9mIHNpemUgYiBuZWVkZWQgdG8gaG9sZCBhbGwgb2YgYSAqLworI2RlZmluZSBob3dtYW55KHgseSkgKCgoeCkrKCh5KS0xKSkvKHkpKQorCisvKiBIb3cgbWFueSBsb25ncyBpbiBtYXNrIG9mIG4gYml0cyAqLworI2RlZmluZSBsb25nc3BlcmJpdHMobikgaG93bWFueShuLCBiaXRzcGVybG9uZykKKworI2RlZmluZSBtYXgoYSxiKSAoKGEpID4gKGIpID8gKGEpIDogKGIpKQorCisvKgorICogQWxsb2NhdGUgYW5kIGZyZWUgYHN0cnVjdCBiaXRtYXNrICpgCisgKi8KKworLyogQWxsb2NhdGUgYSBuZXcgYHN0cnVjdCBiaXRtYXNrYCB3aXRoIGEgc2l6ZSBvZiBuIGJpdHMgKi8KK3N0cnVjdCBiaXRtYXNrICpiaXRtYXNrX2FsbG9jKHVuc2lnbmVkIGludCBuKQoreworCXN0cnVjdCBiaXRtYXNrICpibXA7CisKKwlibXAgPSBtYWxsb2Moc2l6ZW9mKCpibXApKTsKKwlpZiAoYm1wID09IDApCisJCXJldHVybiAwOworCWJtcC0+c2l6ZSA9IG47CisJYm1wLT5tYXNrcCA9IGNhbGxvYyhsb25nc3BlcmJpdHMobiksIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJaWYgKGJtcC0+bWFza3AgPT0gMCkgeworCQlmcmVlKGJtcCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gYm1wOworfQorCisvKiBGcmVlIGBzdHJ1Y3QgYml0bWFza2AgKi8KK3ZvaWQgYml0bWFza19mcmVlKHN0cnVjdCBiaXRtYXNrICpibXApCit7CisJaWYgKGJtcCA9PSAwKQorCQlyZXR1cm47CisJZnJlZShibXAtPm1hc2twKTsKKwlibXAtPm1hc2twID0gKHVuc2lnbmVkIGxvbmcgKikweGRlYWRjZGVmOyAgLyogZG91YmxlIGZyZWUgdHJpcHdpcmUgKi8KKwlmcmVlKGJtcCk7Cit9CisKKy8qCisgKiBUaGUgcm91dGluZXMgX2dldGJpdCgpIGFuZCBfc2V0Yml0KCkgYXJlIHRoZSBvbmx5CisgKiByb3V0aW5lcyB0aGF0IGFjdHVhbGx5IHVuZGVyc3RhbmQgdGhlIGxheW91dCBvZiBibXAtPm1hc2twW10uCisgKgorICogT24gbGl0dGxlIGVuZGlhbiBhcmNoaXRlY3R1cmVzLCB0aGlzIGNvdWxkIHNpbXBseSBiZSBhbiBhcnJheSBvZgorICogYnl0ZXMuICBCdXQgdGhlIGtlcm5lbCBsYXlvdXQgb2YgYml0bWFza3MgX2lzXyB2aXNpYmxlIHRvIHVzZXJzcGFjZQorICogdmlhIHRoZSBzY2hlZF8oc2V0L2dldClhZmZpbml0eSBjYWxscyBpbiBMaW51eCAyLjYsIGFuZCBvbiBiaWcKKyAqIGVuZGlhbiBhcmNoaXRlY3R1cmVzLCBpdCBpcyBwYWluZnVsbHkgb2J2aW91cyB0aGF0IHRoaXMgaXMgYW4KKyAqIGFycmF5IG9mIHVuc2lnbmVkIGxvbmdzLgorICovCisKKy8qIFJldHVybiB0aGUgdmFsdWUgKDAgb3IgMSkgb2YgYml0IG4gaW4gYml0bWFzayBibXAgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgX2dldGJpdChjb25zdCBzdHJ1Y3QgYml0bWFzayAqYm1wLCB1bnNpZ25lZCBpbnQgbikKK3sKKwlpZiAobiA8IGJtcC0+c2l6ZSkKKwkJcmV0dXJuIChibXAtPm1hc2twW24vYml0c3BlcmxvbmddID4+IChuICUgYml0c3BlcmxvbmcpKSAmIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyogU2V0IGJpdCBuIGluIGJpdG1hc2sgYm1wIHRvIHZhbHVlIHYgKDAgb3IgMSkgKi8KK3N0YXRpYyB2b2lkIF9zZXRiaXQoc3RydWN0IGJpdG1hc2sgKmJtcCwgdW5zaWduZWQgaW50IG4sIHVuc2lnbmVkIGludCB2KQoreworCWlmIChuIDwgYm1wLT5zaXplKSB7CisJCWlmICh2KQorCQkJYm1wLT5tYXNrcFtuL2JpdHNwZXJsb25nXSB8PSAxVUwgPDwgKG4gJSBiaXRzcGVybG9uZyk7CisJCWVsc2UKKwkJCWJtcC0+bWFza3Bbbi9iaXRzcGVybG9uZ10gJj0gfigxVUwgPDwgKG4gJSBiaXRzcGVybG9uZykpOworCX0KK30KKworLyoKKyAqIFdoZW4gcGFyc2luZyBiaXRtYXNrIGxpc3RzLCBvbmx5IGFsbG93IG51bWJlcnMsIHNlcGFyYXRlZCBieSBvbmUKKyAqIG9mIHRoZSBhbGxvd2VkIG5leHQgY2hhcmFjdGVycy4KKyAqCisgKiBUaGUgcGFyYW1ldGVyICdzcmV0JyBpcyB0aGUgcmV0dXJuIGZyb20gYSBzc2NhbmYgIiV1JWMiLiAgSXQgaXMKKyAqIC0xIGlmIHRoZSBzc2NhbmYgaW5wdXQgc3RyaW5nIHdhcyBlbXB0eS4gIEl0IGlzIDAgaWYgdGhlIGZpcnN0CisgKiBjaGFyYWN0ZXIgaW4gdGhlIHNzY2FuZiBpbnB1dCBzdHJpbmcgd2FzIG5vdCBhIGRlY2ltYWwgbnVtYmVyLgorICogSXQgaXMgMSBpZiB0aGUgdW5zaWduZWQgbnVtYmVyIG1hdGNoaW5nIHRoZSAiJXUiIHdhcyB0aGUgZW5kIG9mIHRoZQorICogaW5wdXQgc3RyaW5nLiAgSXQgaXMgMiBpZiBvbmUgb3IgbW9yZSBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgZm9sbG93ZWQKKyAqIHRoZSBtYXRjaGVkIHVuc2lnbmVkIG51bWJlci4gIElmIGl0IGlzIDIsIHRoZW4gJ25leHRjJyBpcyB0aGUgZmlyc3QKKyAqIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIG51bWJlci4gIFRoZSBwYXJhbWV0ZXIgJ29rX25leHRfY2hhcnMnCisgKiBpcyB0aGUgbnVsLXRlcm1pbmF0ZWQgbGlzdCBvZiBhbGxvd2VkIG5leHQgY2hhcmFjdGVycy4KKyAqCisgKiBUaGUgbWFzayB0ZXJtIGp1c3Qgc2Nhbm5lZCB3YXMgb2sgaWYgYW5kIG9ubHkgaWYgZWl0aGVyIHRoZSBudW1iZXJzCisgKiBtYXRjaGluZyB0aGUgJXUgd2VyZSBhbGwgb2YgdGhlIGlucHV0IG9yIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpbgorICogdGhlIGlucHV0IHBhc3QgdGhlIG51bWJlcnMgd2FzIG9uZSBvZiB0aGUgYWxsb3dlZCBuZXh0IGNoYXJhY3RlcnMuCisgKi8KK3N0YXRpYyBpbnQgc2Nhbl93YXNfb2soaW50IHNyZXQsIGNoYXIgbmV4dGMsIGNvbnN0IGNoYXIgKm9rX25leHRfY2hhcnMpCit7CisJcmV0dXJuIHNyZXQgPT0gMSB8fAorCQkoc3JldCA9PSAyICYmIHN0cmNocihva19uZXh0X2NoYXJzLCBuZXh0YykgIT0gTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpuZXh0dG9rZW4oY29uc3QgY2hhciAqcSwgIGludCBzZXApCit7CisJaWYgKHEpCisJCXEgPSBzdHJjaHIocSwgc2VwKTsKKwlpZiAocSkKKwkJcSsrOworCXJldHVybiBxOworfQorCisvKiBTZXQgYSBzaW5nbGUgYml0IGkgaW4gYml0bWFzayAqLworc3RydWN0IGJpdG1hc2sgKmJpdG1hc2tfc2V0Yml0KHN0cnVjdCBiaXRtYXNrICpibXAsIHVuc2lnbmVkIGludCBpKQoreworCV9zZXRiaXQoYm1wLCBpLCAxKTsKKwlyZXR1cm4gYm1wOworfQorCisvKiBTZXQgYWxsIGJpdHMgaW4gYml0bWFzazogYm1wID0gfjAgKi8KK3N0cnVjdCBiaXRtYXNrICpiaXRtYXNrX3NldGFsbChzdHJ1Y3QgYml0bWFzayAqYm1wKQoreworCXVuc2lnbmVkIGludCBpOworCWZvciAoaSA9IDA7IGkgPCBibXAtPnNpemU7IGkrKykKKwkJX3NldGJpdChibXAsIGksIDEpOworCXJldHVybiBibXA7Cit9CisKKy8qIENsZWFyIGFsbCBiaXRzIGluIGJpdG1hc2s6IGJtcCA9IDAgKi8KK3N0cnVjdCBiaXRtYXNrICpiaXRtYXNrX2NsZWFyYWxsKHN0cnVjdCBiaXRtYXNrICpibXApCit7CisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGJtcC0+c2l6ZTsgaSsrKQorCQlfc2V0Yml0KGJtcCwgaSwgMCk7CisJcmV0dXJuIGJtcDsKK30KKworLyogVHJ1ZSBpZiBhbGwgYml0cyBhcmUgY2xlYXIgKi8KK2ludCBiaXRtYXNrX2lzYWxsY2xlYXIoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYm1wLT5zaXplOyBpKyspCisJCWlmIChfZ2V0Yml0KGJtcCwgaSkpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyogVHJ1ZSBpZiBzcGVjaWZpZWQgYml0IGkgaXMgc2V0ICovCitpbnQgYml0bWFza19pc2JpdHNldChjb25zdCBzdHJ1Y3QgYml0bWFzayAqYm1wLCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlyZXR1cm4gX2dldGJpdChibXAsIGkpOworfQorCisvKiBOdW1iZXIgb2YgbG93ZXN0IHNldCBiaXQgKG1pbikgKi8KK3Vuc2lnbmVkIGludCBiaXRtYXNrX2ZpcnN0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApCit7CisJcmV0dXJuIGJpdG1hc2tfbmV4dChibXAsIDApOworfQorCisvKiBOdW1iZXIgb2YgaGlnaGVzdCBzZXQgYml0IChtYXgpICovCit1bnNpZ25lZCBpbnQgYml0bWFza19sYXN0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IG0gPSBibXAtPnNpemU7CisJZm9yIChpID0gMDsgaSA8IGJtcC0+c2l6ZTsgaSsrKQorCQlpZiAoX2dldGJpdChibXAsIGkpKQorCQkJbSA9IGk7CisJcmV0dXJuIG07Cit9CisKKy8qIE51bWJlciBvZiBuZXh0IHNldCBiaXQgYXQgb3IgYWJvdmUgZ2l2ZW4gYml0IGkgKi8KK3Vuc2lnbmVkIGludCBiaXRtYXNrX25leHQoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCwgdW5zaWduZWQgaW50IGkpCit7CisJdW5zaWduZWQgaW50IG47CisJZm9yIChuID0gaTsgbiA8IGJtcC0+c2l6ZTsgbisrKQorCQlpZiAoX2dldGJpdChibXAsIG4pKQorCQkJYnJlYWs7CisJcmV0dXJuIG47Cit9CisKKy8qCisgKiBQYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBudW1iZXJzIGFuZCByYW5nZXMgb2YgbnVtYmVycywKKyAqIHdpdGggb3B0aW9uYWwgJzoldScgc3RyaWRlcyBtb2RpZnlpbmcgcmFuZ2VzLCBpbnRvIHByb3ZpZGVkIGJpdG1hc2suCisgKiBTb21lIGV4YW1wbGVzIG9mIGlucHV0IGxpc3RzIGFuZCB0aGVpciBlcXVpdmFsZW50IHNpbXBsZSBsaXN0OgorICoJSW5wdXQJCUVxdWl2YWxlbnQgdG8KKyAqCTAtMwkJMCwxLDIsMworICoJMC03OjIJCTAsMiw0LDYKKyAqCTEsMyw1LTcJCTEsMyw1LDYsNworICoJMC0zOjIsOC0xNTo0CTAsMiw4LDEyCQorICovCitpbnQgYml0bWFza19wYXJzZWxpc3QoY29uc3QgY2hhciAqYnVmLCBzdHJ1Y3QgYml0bWFzayAqYm1wKQoreworCWNvbnN0IGNoYXIgKnAsICpxOworCisJYml0bWFza19jbGVhcmFsbChibXApOworCisJcSA9IGJ1ZjsKKwl3aGlsZSAocCA9IHEsIHEgPSBuZXh0dG9rZW4ocSwgJywnKSwgcCkgeworCQl1bnNpZ25lZCBpbnQgYTsJCS8qIGJlZ2luIG9mIHJhbmdlICovCisJCXVuc2lnbmVkIGludCBiOwkJLyogZW5kIG9mIHJhbmdlICovCisJCXVuc2lnbmVkIGludCBzOwkJLyogc3RyaWRlICovCisJCWNvbnN0IGNoYXIgKmMxLCAqYzI7CS8qIG5leHQgdG9rZW5zIGFmdGVyICctJyBvciAnLCcgKi8KKwkJY2hhciBuZXh0YzsJCS8qIGNoYXIgYWZ0ZXIgc3NjYW5mICV1IG1hdGNoICovCisJCWludCBzcmV0OwkJLyogc3NjYW5mIHJldHVybiAobnVtYmVyIG9mIG1hdGNoZXMpICovCisKKwkJc3JldCA9IHNzY2FuZihwLCAiJXUlYyIsICZhLCAmbmV4dGMpOworCQlpZiAoIXNjYW5fd2FzX29rKHNyZXQsIG5leHRjLCAiLC0iKSkKKwkJCWdvdG8gZXJyOworCQliID0gYTsKKwkJcyA9IDE7CisJCWMxID0gbmV4dHRva2VuKHAsICctJyk7CisJCWMyID0gbmV4dHRva2VuKHAsICcsJyk7CisJCWlmIChjMSAhPSBOVUxMICYmIChjMiA9PSBOVUxMIHx8IGMxIDwgYzIpKSB7CisJCQlzcmV0ID0gc3NjYW5mKGMxLCAiJXUlYyIsICZiLCAmbmV4dGMpOworCQkJaWYgKCFzY2FuX3dhc19vayhzcmV0LCBuZXh0YywgIiw6IikpCisJCQkJZ290byBlcnI7CisJCQljMSA9IG5leHR0b2tlbihjMSwgJzonKTsKKwkJCWlmIChjMSAhPSBOVUxMICYmIChjMiA9PSBOVUxMIHx8IGMxIDwgYzIpKSB7CisJCQkJc3JldCA9IHNzY2FuZihjMSwgIiV1JWMiLCAmcywgJm5leHRjKTsKKwkJCQlpZiAoIXNjYW5fd2FzX29rKHNyZXQsIG5leHRjLCAiLCIpKQorCQkJCQlnb3RvIGVycjsKKwkJCX0KKwkJfQorCQlpZiAoIShhIDw9IGIpKQorCQkJZ290byBlcnI7CisJCWlmIChiID49IGJtcC0+c2l6ZSkKKwkJCWdvdG8gZXJyOworCQl3aGlsZSAoYSA8PSBiKSB7CisJCQlfc2V0Yml0KGJtcCwgYSwgMSk7CisJCQlhICs9IHM7CisJCX0KKwl9CisJcmV0dXJuIDA7CitlcnI6CisJYml0bWFza19jbGVhcmFsbChibXApOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIGVtaXQoYnVmLCBidWZsZW4sIHJib3QsIHJ0b3AsIGxlbikKKyAqCisgKiBIZWxwZXIgcm91dGluZSBmb3IgYml0bWFza19kaXNwbGF5bGlzdCgpLiAgV3JpdGUgZGVjaW1hbCBudW1iZXIKKyAqIG9yIHJhbmdlIHRvIGJ1ZitsZW4sIHN1cHByZXNzaW5nIG91dHB1dCBwYXN0IGJ1ZitidWZsZW4sIHdpdGggb3B0aW9uYWwKKyAqIGNvbW1hLXByZWZpeC4gIFJldHVybiBsZW4gb2Ygd2hhdCB3b3VsZCBiZSB3cml0dGVuIHRvIGJ1ZiwgaWYgaXQKKyAqIGFsbCBmaXQuCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgZW1pdChjaGFyICpidWYsIGludCBidWZsZW4sIGludCByYm90LCBpbnQgcnRvcCwgaW50IGxlbikKK3sKKwlpZiAobGVuID4gMCkKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4KGJ1ZmxlbiAtIGxlbiwgMCksICIsIik7CisJaWYgKHJib3QgPT0gcnRvcCkKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4KGJ1ZmxlbiAtIGxlbiwgMCksICIlZCIsIHJib3QpOworCWVsc2UKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgbWF4KGJ1ZmxlbiAtIGxlbiwgMCksICIlZC0lZCIsIHJib3QsIHJ0b3ApOworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBXcml0ZSBkZWNpbWFsIGxpc3QgcmVwcmVzZW50YXRpb24gb2YgYm1wIHRvIGJ1Zi4KKyAqCisgKiBPdXRwdXQgZm9ybWF0IGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZGVjaW1hbCBudW1iZXJzIGFuZAorICogcmFuZ2VzLiAgQ29uc2VjdXRpdmVseSBzZXQgYml0cyBhcmUgc2hvd24gYXMgdHdvIGh5cGhlbi1zZXBhcmF0ZWQKKyAqIGRlY2ltYWwgbnVtYmVycywgdGhlIHNtYWxsZXN0IGFuZCBsYXJnZXN0IGJpdCBudW1iZXJzIHNldCBpbgorICogdGhlIHJhbmdlLiAgT3V0cHV0IGZvcm1hdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGZvcm1hdAorICogYWNjZXB0ZWQgYXMgaW5wdXQgYnkgYml0bWFwX3BhcnNlbGlzdCgpLgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdoaWNoIHdvdWxkIGJlCisgKiBnZW5lcmF0ZWQgZm9yIHRoZSBnaXZlbiBpbnB1dCwgZXhjbHVkaW5nIHRoZSB0cmFpbGluZyAnXDAnLCBhcworICogcGVyIElTTyBDOTkuCisgKi8KKworaW50IGJpdG1hc2tfZGlzcGxheWxpc3QoY2hhciAqYnVmLCBpbnQgYnVmbGVuLCBjb25zdCBzdHJ1Y3QgYml0bWFzayAqYm1wKQoreworCWludCBsZW4gPSAwOworCS8qIGN1cnJlbnQgYml0IGlzICdjdXInLCBtb3N0IHJlY2VudGx5IHNlZW4gcmFuZ2UgaXMgW3Jib3QsIHJ0b3BdICovCisJdW5zaWduZWQgaW50IGN1ciwgcmJvdCwgcnRvcDsKKworCWlmIChidWZsZW4gPiAwKQorCQkqYnVmID0gMDsKKwlyYm90ID0gY3VyID0gYml0bWFza19maXJzdChibXApOworCXdoaWxlIChjdXIgPCBibXAtPnNpemUpIHsKKwkJcnRvcCA9IGN1cjsKKwkJY3VyID0gYml0bWFza19uZXh0KGJtcCwgY3VyKzEpOworCQlpZiAoY3VyID49IGJtcC0+c2l6ZSB8fCBjdXIgPiBydG9wICsgMSkgeworCQkJbGVuID0gZW1pdChidWYsIGJ1ZmxlbiwgcmJvdCwgcnRvcCwgbGVuKTsKKwkJCXJib3QgPSBjdXI7CisJCX0KKwl9CisJcmV0dXJuIGxlbjsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvYml0bWFzay5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9iaXRtYXNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIyODlkZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvYml0bWFzay5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgX19DUFVQT1dFUl9CSVRNQVNLX18KKyNkZWZpbmUgX19DUFVQT1dFUl9CSVRNQVNLX18KKworLyogVGFrZW4gb3ZlciBmcm9tIGxpYmJpdG1hc2ssIGEgcHJvamVjdCBpbml0aWF0ZWQgZnJvbSBzZ2k6CisgKiBVcmw6ICAgICAgICAgICAgaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL2NwdXNldHMvCisgKiBVbmZvcnR1bmF0ZWx5IGl0J3Mgbm90IHZlcnkgd2lkZXNwcmVhZCwgdGhlcmVmb3JlIHJlbGV2YW50IHBhcnRzIGFyZQorICogcGFzdGVkIGhlcmUuCisgKi8KKworc3RydWN0IGJpdG1hc2sgeworCXVuc2lnbmVkIGludCBzaXplOworCXVuc2lnbmVkIGxvbmcgKm1hc2twOworfTsKKworc3RydWN0IGJpdG1hc2sgKmJpdG1hc2tfYWxsb2ModW5zaWduZWQgaW50IG4pOwordm9pZCBiaXRtYXNrX2ZyZWUoc3RydWN0IGJpdG1hc2sgKmJtcCk7CisKK3N0cnVjdCBiaXRtYXNrICpiaXRtYXNrX3NldGJpdChzdHJ1Y3QgYml0bWFzayAqYm1wLCB1bnNpZ25lZCBpbnQgaSk7CitzdHJ1Y3QgYml0bWFzayAqYml0bWFza19zZXRhbGwoc3RydWN0IGJpdG1hc2sgKmJtcCk7CitzdHJ1Y3QgYml0bWFzayAqYml0bWFza19jbGVhcmFsbChzdHJ1Y3QgYml0bWFzayAqYm1wKTsKKwordW5zaWduZWQgaW50IGJpdG1hc2tfZmlyc3QoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCk7Cit1bnNpZ25lZCBpbnQgYml0bWFza19uZXh0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXAsIHVuc2lnbmVkIGludCBpKTsKK3Vuc2lnbmVkIGludCBiaXRtYXNrX2xhc3QoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCk7CitpbnQgYml0bWFza19pc2FsbGNsZWFyKGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApOworaW50IGJpdG1hc2tfaXNiaXRzZXQoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCwgdW5zaWduZWQgaW50IGkpOworCitpbnQgYml0bWFza19wYXJzZWxpc3QoY29uc3QgY2hhciAqYnVmLCBzdHJ1Y3QgYml0bWFzayAqYm1wKTsKK2ludCBiaXRtYXNrX2Rpc3BsYXlsaXN0KGNoYXIgKmJ1ZiwgaW50IGxlbiwgY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCk7CisKKworCisjZW5kaWYgLypfX0NQVVBPV0VSX0JJVE1BU0tfXyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9jcHVpZC5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9jcHVpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMDIxZjMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2NwdWlkLmMKQEAgLTAsMCArMSwxNDUgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKmNwdV92ZW5kb3JfdGFibGVbWDg2X1ZFTkRPUl9NQVhdID0geworCSJVbmtub3duIiwgIkdlbnVpbmVJbnRlbCIsICJBdXRoZW50aWNBTUQiLAorfTsKKworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKworLyogZnJvbSBnY2MgKi8KKyNpbmNsdWRlIDxjcHVpZC5oPgorCisvKgorICogQ1BVSUQgZnVuY3Rpb25zIHJldHVybmluZyBhIHNpbmdsZSBkYXR1bQorICoKKyAqIERlZmluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZVthYmNkXXgodW5zaWduZWQgaW50IG9wKQorICovCisjZGVmaW5lIGNwdWlkX2Z1bmMocmVnKQkJCQkJXAorCXVuc2lnbmVkIGludCBjcHVpZF8jI3JlZyh1bnNpZ25lZCBpbnQgb3ApCVwKKwl7CQkJCQkJXAorCXVuc2lnbmVkIGludCBlYXgsIGVieCwgZWN4LCBlZHg7CQlcCisJX19jcHVpZChvcCwgZWF4LCBlYngsIGVjeCwgZWR4KTsJCVwKKwlyZXR1cm4gcmVnOwkJCQkJXAorCX0KK2NwdWlkX2Z1bmMoZWF4KTsKK2NwdWlkX2Z1bmMoZWJ4KTsKK2NwdWlkX2Z1bmMoZWN4KTsKK2NwdWlkX2Z1bmMoZWR4KTsKKworI2VuZGlmIC8qIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgKi8KKworLyogZ2V0X2NwdV9pbmZvCisgKgorICogRXh0cmFjdCBDUFUgdmVuZG9yLCBmYW1pbHksIG1vZGVsLCBzdGVwcGluZyBpbmZvIGZyb20gL3Byb2MvY3B1aW5mbworICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdiBlcnJvciBjb2RlCisgKgorICogVEJEOiBTaG91bGQgdGhlcmUgYmUgYSBjcHVpZCBhbHRlcm5hdGl2ZSBmb3IgdGhpcyBpZiAvcHJvYyBpcyBub3QgbW91bnRlZD8KKyAqLworaW50IGdldF9jcHVfaW5mbyh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1cG93ZXJfY3B1X2luZm8gKmNwdV9pbmZvKQoreworCUZJTEUgKmZwOworCWNoYXIgdmFsdWVbNjRdOworCXVuc2lnbmVkIGludCBwcm9jLCB4OworCXVuc2lnbmVkIGludCB1bmtub3duID0gMHhmZmZmZmY7CisJdW5zaWduZWQgaW50IGNwdWlkX2xldmVsLCBleHRfY3B1aWRfbGV2ZWw7CisKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWNwdV9pbmZvLT52ZW5kb3IJCT0gWDg2X1ZFTkRPUl9VTktOT1dOOworCWNwdV9pbmZvLT5mYW1pbHkJCT0gdW5rbm93bjsKKwljcHVfaW5mby0+bW9kZWwJCQk9IHVua25vd247CisJY3B1X2luZm8tPnN0ZXBwaW5nCQk9IHVua25vd247CisJY3B1X2luZm8tPmNhcHMJCQk9IDA7CisKKwlmcCA9IGZvcGVuKCIvcHJvYy9jcHVpbmZvIiwgInIiKTsKKwlpZiAoIWZwKQorCQlyZXR1cm4gLUVJTzsKKworCXdoaWxlICghZmVvZihmcCkpIHsKKwkJaWYgKCFmZ2V0cyh2YWx1ZSwgNjQsIGZwKSkKKwkJCWNvbnRpbnVlOworCQl2YWx1ZVs2MyAtIDFdID0gJ1wwJzsKKworCQlpZiAoIXN0cm5jbXAodmFsdWUsICJwcm9jZXNzb3JcdDogIiwgMTIpKSB7CisJCQlzc2NhbmYodmFsdWUsICJwcm9jZXNzb3JcdDogJXUiLCAmcHJvYyk7CisJCX0KKwkJaWYgKHByb2MgIT0gY3B1KQorCQkJY29udGludWU7CisKKwkJLyogR2V0IENQVSB2ZW5kb3IgKi8KKwkJaWYgKCFzdHJuY21wKHZhbHVlLCAidmVuZG9yX2lkIiwgOSkpCisJCQlmb3IgKHggPSAxOyB4IDwgWDg2X1ZFTkRPUl9NQVg7IHgrKykgeworCQkJCWlmIChzdHJzdHIodmFsdWUsIGNwdV92ZW5kb3JfdGFibGVbeF0pKQorCQkJCQljcHVfaW5mby0+dmVuZG9yID0geDsKKwkJCX0KKwkJLyogR2V0IENQVSBmYW1pbHksIGV0Yy4gKi8KKwkJZWxzZSBpZiAoIXN0cm5jbXAodmFsdWUsICJjcHUgZmFtaWx5XHQ6ICIsIDEzKSkgeworCQkJc3NjYW5mKHZhbHVlLCAiY3B1IGZhbWlseVx0OiAldSIsCisJCQkgICAgICAgJmNwdV9pbmZvLT5mYW1pbHkpOworCQl9CisJCWVsc2UgaWYgKCFzdHJuY21wKHZhbHVlLCAibW9kZWxcdFx0OiAiLCA5KSkgeworCQkJc3NjYW5mKHZhbHVlLCAibW9kZWxcdFx0OiAldSIsCisJCQkgICAgICAgJmNwdV9pbmZvLT5tb2RlbCk7CisJCX0KKwkJZWxzZSBpZiAoIXN0cm5jbXAodmFsdWUsICJzdGVwcGluZ1x0OiAiLCAxMCkpIHsKKwkJCXNzY2FuZih2YWx1ZSwgInN0ZXBwaW5nXHQ6ICV1IiwKKwkJCSAgICAgICAmY3B1X2luZm8tPnN0ZXBwaW5nKTsKKworCQkJLyogRXhpdCAtPiBhbGwgdmFsdWVzIG11c3QgaGF2ZSBiZWVuIHNldCAqLworCQkJaWYgKGNwdV9pbmZvLT52ZW5kb3IgPT0gWDg2X1ZFTkRPUl9VTktOT1dOIHx8CisJCQkgICAgY3B1X2luZm8tPmZhbWlseSA9PSB1bmtub3duIHx8CisJCQkgICAgY3B1X2luZm8tPm1vZGVsID09IHVua25vd24gfHwKKwkJCSAgICBjcHVfaW5mby0+c3RlcHBpbmcgPT0gdW5rbm93bikgeworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCXJldCA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlyZXQgPSAtRU5PREVWOworb3V0OgorCWZjbG9zZShmcCk7CisJLyogR2V0IHNvbWUgdXNlZnVsIENQVSBjYXBhYmlsaXRpZXMgZnJvbSBjcHVpZCAqLworCWlmIChjcHVfaW5mby0+dmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EICYmCisJICAgIGNwdV9pbmZvLT52ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkKKwkJcmV0dXJuIHJldDsKKworCWNwdWlkX2xldmVsCT0gY3B1aWRfZWF4KDApOworCWV4dF9jcHVpZF9sZXZlbAk9IGNwdWlkX2VheCgweDgwMDAwMDAwKTsKKworCS8qIEludmFyaWFudCBUU0MgKi8KKwlpZiAoZXh0X2NwdWlkX2xldmVsID49IDB4ODAwMDAwMDcgJiYKKwkgICAgKGNwdWlkX2VkeCgweDgwMDAwMDA3KSAmICgxIDw8IDgpKSkKKwkJY3B1X2luZm8tPmNhcHMgfD0gQ1BVUE9XRVJfQ0FQX0lOVl9UU0M7CisKKwkvKiBBcGVyZi9NcGVyZiByZWdpc3RlcnMgc3VwcG9ydCAqLworCWlmIChjcHVpZF9sZXZlbCA+PSA2ICYmIChjcHVpZF9lY3goNikgJiAweDEpKQorCQljcHVfaW5mby0+Y2FwcyB8PSBDUFVQT1dFUl9DQVBfQVBFUkY7CisKKwkvKiBBTUQgQm9vc3Qgc3RhdGUgZW5hYmxlL2Rpc2FibGUgcmVnaXN0ZXIgKi8KKwlpZiAoY3B1X2luZm8tPnZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgeworCQlpZiAoZXh0X2NwdWlkX2xldmVsID49IDB4ODAwMDAwMDcgJiYKKwkJICAgIChjcHVpZF9lZHgoMHg4MDAwMDAwNykgJiAoMSA8PCA5KSkpCisJCQljcHVfaW5mby0+Y2FwcyB8PSBDUFVQT1dFUl9DQVBfQU1EX0NCUDsKKwl9CisKKwkvKiBJbnRlbCdzIHBlcmYtYmlhcyBNU1Igc3VwcG9ydCAqLworCWlmIChjcHVfaW5mby0+dmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpIHsKKwkJaWYgKGNwdWlkX2xldmVsID49IDYgJiYgKGNwdWlkX2VjeCg2KSAmICgxIDw8IDMpKSkKKwkJCWNwdV9pbmZvLT5jYXBzIHw9IENQVVBPV0VSX0NBUF9QRVJGX0JJQVM7CisJfQorCisJLyoJcHJpbnRmKCJJRDogJXUgLSBFeHRpZDogMHgleCAtIENhcHM6IDB4JWxseFxuIiwKKwkJY3B1aWRfbGV2ZWwsIGV4dF9jcHVpZF9sZXZlbCwgY3B1X2luZm8tPmNhcHMpOworCSovCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvaGVscGVycy5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9oZWxwZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4N2RhZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvaGVscGVycy5oCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogIChDKSAyMDEwLDIwMTEgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiBNaXNjZWxsYW5lb3VzIGhlbHBlcnMgd2hpY2ggZG8gbm90IGZpdCBvciBhcmUgd29ydGgKKyAqIHRvIHB1dCBpbnRvIHNlcGFyYXRlIGhlYWRlcnMKKyAqLworCisjaWZuZGVmIF9fQ1BVUE9XRVJVVElMU19IRUxQRVJTX18KKyNkZWZpbmUgX19DUFVQT1dFUlVUSUxTX0hFTFBFUlNfXworCisjaW5jbHVkZSA8bGliaW50bC5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorCisjaW5jbHVkZSAiaGVscGVycy9iaXRtYXNrLmgiCisKKy8qIEludGVybmF0aW9uYWxpemF0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIF8oU3RyaW5nKSBnZXR0ZXh0KFN0cmluZykKKyNpZm5kZWYgZ2V0dGV4dF9ub29wCisjZGVmaW5lIGdldHRleHRfbm9vcChTdHJpbmcpIFN0cmluZworI2VuZGlmCisjZGVmaW5lIE5fKFN0cmluZykgZ2V0dGV4dF9ub29wIChTdHJpbmcpCisvKiBJbnRlcm5hdGlvbmFsaXphdGlvbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitleHRlcm4gaW50IHJ1bl9hc19yb290OworZXh0ZXJuIHN0cnVjdCBiaXRtYXNrICpjcHVzX2Nob3NlbjsKKworLyogR2xvYmFsIHZlcmJvc2UgKC1kKSBzdHVmZiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogZGVmaW5lIERFQlVHIHZpYSBnbG9iYWwgTWFrZWZpbGUgdmFyaWFibGUKKyAqIERlYnVnIG91dHB1dCBpcyBzZW50IHRvIHN0ZGVyciwgZG86CisgKiBjcHVwb3dlciBtb25pdG9yIDI+L3RtcC9kZWJ1ZworICogdG8gc3BsaXQgZGVidWcgb3V0cHV0IGF3YXkgZnJvbSBub3JtYWwgb3V0cHV0CisqLworI2lmZGVmIERFQlVHCitleHRlcm4gaW50IGJlX3ZlcmJvc2U7CisKKyNkZWZpbmUgZHByaW50KGZtdCwgLi4uKSB7CQkJCQlcCisJCWlmIChiZV92ZXJib3NlKSB7CQkJCVwKKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6ICIgZm10LAkJXAorCQkJCV9fRlVOQ1RJT05fXywgIyNfX1ZBX0FSR1NfXyk7CVwKKwkJfQkJCQkJCVwKKwl9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGRwcmludChjb25zdCBjaGFyICpmbXQsIC4uLikgeyB9CSAKKyNlbmRpZgorZXh0ZXJuIGludCBiZV92ZXJib3NlOworLyogR2xvYmFsIHZlcmJvc2UgKC12KSBzdHVmZiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGNwdWlkIGFuZCBjcHVpbmZvIGhlbHBlcnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqLworZW51bSBjcHVwb3dlcl9jcHVfdmVuZG9yIHtYODZfVkVORE9SX1VOS05PV04gPSAwLCBYODZfVkVORE9SX0lOVEVMLAorCQkJICBYODZfVkVORE9SX0FNRCwgWDg2X1ZFTkRPUl9NQVh9OworCisjZGVmaW5lIENQVVBPV0VSX0NBUF9JTlZfVFNDCTB4MDAwMDAwMDEKKyNkZWZpbmUgQ1BVUE9XRVJfQ0FQX0FQRVJGCTB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVUE9XRVJfQ0FQX0FNRF9DQlAJMHgwMDAwMDAwNAorI2RlZmluZSBDUFVQT1dFUl9DQVBfUEVSRl9CSUFTCTB4MDAwMDAwMDgKKworI2RlZmluZSBNQVhfSFdfUFNUQVRFUyAxMAorCitzdHJ1Y3QgY3B1cG93ZXJfY3B1X2luZm8geworCWVudW0gY3B1cG93ZXJfY3B1X3ZlbmRvciB2ZW5kb3I7CisJdW5zaWduZWQgaW50IGZhbWlseTsKKwl1bnNpZ25lZCBpbnQgbW9kZWw7CisJdW5zaWduZWQgaW50IHN0ZXBwaW5nOworCS8qIENQVSBjYXBhYmlsaXRpZXMgcmVhZCBvdXQgZnJvbSBjcHVpZCAqLworCXVuc2lnbmVkIGxvbmcgbG9uZyBjYXBzOworfTsKKworLyogZ2V0X2NwdV9pbmZvCisgKgorICogRXh0cmFjdCBDUFUgdmVuZG9yLCBmYW1pbHksIG1vZGVsLCBzdGVwcGluZyBpbmZvIGZyb20gL3Byb2MvY3B1aW5mbworICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdiBlcnJvciBjb2RlCisgKiBPbmx5IHVzZWQgb24geDg2LCBiZWxvdyBnbG9iYWwncyBzdHJ1Y3QgdmFsdWVzIGFyZSB6ZXJvL3Vua25vd24gb24KKyAqIG90aGVyIGFyY2hzCisgKi8KK2V4dGVybiBpbnQgZ2V0X2NwdV9pbmZvKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBjcHVwb3dlcl9jcHVfaW5mbyAqY3B1X2luZm8pOworZXh0ZXJuIHN0cnVjdCBjcHVwb3dlcl9jcHVfaW5mbyBjcHVwb3dlcl9jcHVfaW5mbzsKKy8qIGNwdWlkIGFuZCBjcHVpbmZvIGhlbHBlcnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qIENQVSB0b3BvbG9neS9oaWVyYXJjaHkgcGFyc2luZyAqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgY3B1cG93ZXJfdG9wb2xvZ3kgeworCS8qIEFtb3VudCBvZiBDUFUgY29yZXMsIHBhY2thZ2VzIGFuZCB0aHJlYWRzIHBlciBjb3JlIGluIHRoZSBzeXN0ZW0gKi8KKwl1bnNpZ25lZCBpbnQgY29yZXM7CisJdW5zaWduZWQgaW50IHBrZ3M7CisJdW5zaWduZWQgaW50IHRocmVhZHM7IC8qIHBlciBjb3JlICovCisKKwkvKiBBcnJheSBnZXRzIG1hbGxvY2F0ZWQgd2l0aCBjb3JlcyBlbnRyaWVzLCBob2xkaW5nIHBlciBjb3JlIGluZm8gKi8KKwlzdHJ1Y3QgeworCQlpbnQgcGtnOworCQlpbnQgY29yZTsKKwkJaW50IGNwdTsKKwl9ICpjb3JlX2luZm87Cit9OworCitleHRlcm4gaW50IGdldF9jcHVfdG9wb2xvZ3koc3RydWN0IGNwdXBvd2VyX3RvcG9sb2d5ICpjcHVfdG9wKTsKK2V4dGVybiB2b2lkIGNwdV90b3BvbG9neV9yZWxlYXNlKHN0cnVjdCBjcHVwb3dlcl90b3BvbG9neSBjcHVfdG9wKTsKKy8qIENQVSB0b3BvbG9neS9oaWVyYXJjaHkgcGFyc2luZyAqKioqKioqKioqKioqKioqKiovCisKKy8qIFg4NiBPTkxZICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorCisjaW5jbHVkZSA8cGNpL3BjaS5oPgorCisvKiBSZWFkL1dyaXRlIG1zciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworZXh0ZXJuIGludCByZWFkX21zcihpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWR4LCB1bnNpZ25lZCBsb25nIGxvbmcgKnZhbCk7CitleHRlcm4gaW50IHdyaXRlX21zcihpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWR4LCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsKTsKKworZXh0ZXJuIGludCBtc3JfaW50ZWxfc2V0X3BlcmZfYmlhcyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgdmFsKTsKK2V4dGVybiBpbnQgbXNyX2ludGVsX2dldF9wZXJmX2JpYXModW5zaWduZWQgaW50IGNwdSk7CisKK2V4dGVybiBpbnQgbXNyX2ludGVsX2hhc19ib29zdF9zdXBwb3J0KHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIGludCBtc3JfaW50ZWxfYm9vc3RfaXNfYWN0aXZlKHVuc2lnbmVkIGludCBjcHUpOworCisvKiBSZWFkL1dyaXRlIG1zciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQQ0kgc3R1ZmYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBpbnQgYW1kX3BjaV9nZXRfbnVtX2Jvb3N0X3N0YXRlcyhpbnQgKmFjdGl2ZSwgaW50ICpzdGF0ZXMpOworZXh0ZXJuIHN0cnVjdCBwY2lfZGV2ICpwY2lfYWNjX2luaXQoc3RydWN0IHBjaV9hY2Nlc3MgKipwYWNjLCBpbnQgdmVuZG9yX2lkLAorCQkJCSAgICBpbnQgKmRldl9pZHMpOworCisvKiBQQ0kgc3R1ZmYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQU1EIEhXIHBzdGF0ZSBkZWNvZGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZXh0ZXJuIGludCBkZWNvZGVfcHN0YXRlcyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgY3B1X2ZhbWlseSwKKwkJCSAgaW50IGJvb3N0X3N0YXRlcywgdW5zaWduZWQgbG9uZyAqcHN0YXRlcywgaW50ICpubyk7CisKKy8qIEFNRCBIVyBwc3RhdGUgZGVjb2RpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2V4dGVybiBpbnQgY3B1ZnJlcV9oYXNfYm9vc3Rfc3VwcG9ydCh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgKnN1cHBvcnQsCisJCQkJICAgICBpbnQgKmFjdGl2ZSwgaW50ICogc3RhdGVzKTsKKy8qCisgKiBDUFVJRCBmdW5jdGlvbnMgcmV0dXJuaW5nIGEgc2luZ2xlIGRhdHVtCisgKi8KK3Vuc2lnbmVkIGludCBjcHVpZF9lYXgodW5zaWduZWQgaW50IG9wKTsKK3Vuc2lnbmVkIGludCBjcHVpZF9lYngodW5zaWduZWQgaW50IG9wKTsKK3Vuc2lnbmVkIGludCBjcHVpZF9lY3godW5zaWduZWQgaW50IG9wKTsKK3Vuc2lnbmVkIGludCBjcHVpZF9lZHgodW5zaWduZWQgaW50IG9wKTsKKworLyogY3B1aWQgYW5kIGNwdWluZm8gaGVscGVycyAgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBYODYgT05MWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBkZWNvZGVfcHN0YXRlcyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgY3B1X2ZhbWlseSwKKwkJCQkgaW50IGJvb3N0X3N0YXRlcywgdW5zaWduZWQgbG9uZyAqcHN0YXRlcywKKwkJCQkgaW50ICpubykKK3sgcmV0dXJuIC0xOyB9OworCitzdGF0aWMgaW5saW5lIGludCByZWFkX21zcihpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWR4LCB1bnNpZ25lZCBsb25nIGxvbmcgKnZhbCkKK3sgcmV0dXJuIC0xOyB9Oworc3RhdGljIGlubGluZSBpbnQgd3JpdGVfbXNyKGludCBjcHUsIHVuc2lnbmVkIGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpCit7IHJldHVybiAtMTsgfTsKK3N0YXRpYyBpbmxpbmUgaW50IG1zcl9pbnRlbF9zZXRfcGVyZl9iaWFzKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCB2YWwpCit7IHJldHVybiAtMTsgfTsKK3N0YXRpYyBpbmxpbmUgaW50IG1zcl9pbnRlbF9nZXRfcGVyZl9iaWFzKHVuc2lnbmVkIGludCBjcHUpCit7IHJldHVybiAtMTsgfTsKKworc3RhdGljIGlubGluZSBpbnQgbXNyX2ludGVsX2hhc19ib29zdF9zdXBwb3J0KHVuc2lnbmVkIGludCBjcHUpCit7IHJldHVybiAtMTsgfTsKK3N0YXRpYyBpbmxpbmUgaW50IG1zcl9pbnRlbF9ib29zdF9pc19hY3RpdmUodW5zaWduZWQgaW50IGNwdSkKK3sgcmV0dXJuIC0xOyB9OworCisvKiBSZWFkL1dyaXRlIG1zciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW5saW5lIGludCBjcHVmcmVxX2hhc19ib29zdF9zdXBwb3J0KHVuc2lnbmVkIGludCBjcHUsIGludCAqc3VwcG9ydCwKKwkJCQkJICAgIGludCAqYWN0aXZlLCBpbnQgKiBzdGF0ZXMpCit7IHJldHVybiAtMTsgfQorCisvKiBjcHVpZCBhbmQgY3B1aW5mbyBoZWxwZXJzICAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZWF4KHVuc2lnbmVkIGludCBvcCkgeyByZXR1cm4gMDsgfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VieCh1bnNpZ25lZCBpbnQgb3ApIHsgcmV0dXJuIDA7IH07CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lY3godW5zaWduZWQgaW50IG9wKSB7IHJldHVybiAwOyB9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZWR4KHVuc2lnbmVkIGludCBvcCkgeyByZXR1cm4gMDsgfTsKKyNlbmRpZiAvKiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pICovCisKKyNlbmRpZiAvKiBfX0NQVVBPV0VSVVRJTFNfSEVMUEVSU19fICovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL21pc2MuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNTY2ZTkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL21pc2MuYwpAQCAtMCwwICsxLDM0IEBACisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisKK2ludCBjcHVmcmVxX2hhc19ib29zdF9zdXBwb3J0KHVuc2lnbmVkIGludCBjcHUsIGludCAqc3VwcG9ydCwgaW50ICphY3RpdmUsIGludCAqIHN0YXRlcykKK3sKKwlzdHJ1Y3QgY3B1cG93ZXJfY3B1X2luZm8gY3B1X2luZm87CisJaW50IHJldDsKKworCSpzdXBwb3J0ID0gKmFjdGl2ZSA9ICpzdGF0ZXMgPSAwOworCisJcmV0ID0gZ2V0X2NwdV9pbmZvKDAsICZjcHVfaW5mbyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChjcHVwb3dlcl9jcHVfaW5mby5jYXBzICYgQ1BVUE9XRVJfQ0FQX0FNRF9DQlApIHsKKwkJKnN1cHBvcnQgPSAxOworCQlhbWRfcGNpX2dldF9udW1fYm9vc3Rfc3RhdGVzKGFjdGl2ZSwgc3RhdGVzKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJcmV0dXJuIHJldDsKKwkJKnN1cHBvcnQgPSAxOworCX0gZWxzZSBpZiAoY3B1cG93ZXJfY3B1X2luZm8udmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpIHsKKwkJcmV0ID0gbXNyX2ludGVsX2hhc19ib29zdF9zdXBwb3J0KGNwdSk7CisJCWlmIChyZXQgPD0gMCkKKwkJCXJldHVybiByZXQ7CisJCSpzdXBwb3J0ID0gcmV0OworCQlyZXQgPSBtc3JfaW50ZWxfYm9vc3RfaXNfYWN0aXZlKGNwdSk7CisJCWlmIChyZXQgPD0gMCkKKwkJCXJldHVybiByZXQ7CisJCSphY3RpdmUgPSByZXQ7CisJfQorCXJldHVybiAwOworfQorI2VuZGlmIC8qICNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pICovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL21zci5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9tc3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2Q0OGJkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9tc3IuYwpAQCAtMCwwICsxLDEyMiBAQAorI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorCisvKiBJbnRlbCBzcGVjaWZpYyBNU1JzICovCisjZGVmaW5lIE1TUl9JQTMyX1BFUkZfU1RBVFVTCQkweDE5OAorI2RlZmluZSBNU1JfSUEzMl9NSVNDX0VOQUJMRVMJCTB4MWEwCisjZGVmaW5lIE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVMJMHgxYjAKKworLyoKKyAqIHJlYWRfbXNyCisgKgorICogV2lsbCByZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCAtMSBvbiBmYWlsdXJlLgorICogUG9zc2libGUgZXJybm8gdmFsdWVzIGNvdWxkIGJlOgorICogRUZBVUxUIC1JZiB0aGUgcmVhZC93cml0ZSBkaWQgbm90IGZ1bGx5IGNvbXBsZXRlCisgKiBFSU8gICAgLUlmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBNU1JzCisgKiBFTlhJTyAgLUlmIHRoZSBDUFUgZG9lcyBub3QgZXhpc3QKKyAqLworCitpbnQgcmVhZF9tc3IoaW50IGNwdSwgdW5zaWduZWQgaW50IGlkeCwgdW5zaWduZWQgbG9uZyBsb25nICp2YWwpCit7CisJaW50IGZkOworCWNoYXIgbXNyX2ZpbGVfbmFtZVs2NF07CisKKwlzcHJpbnRmKG1zcl9maWxlX25hbWUsICIvZGV2L2NwdS8lZC9tc3IiLCBjcHUpOworCWZkID0gb3Blbihtc3JfZmlsZV9uYW1lLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmIChsc2VlayhmZCwgaWR4LCBTRUVLX0NVUikgPT0gLTEpCisJCWdvdG8gZXJyOworCWlmIChyZWFkKGZkLCB2YWwsIHNpemVvZiAqdmFsKSAhPSBzaXplb2YgKnZhbCkKKwkJZ290byBlcnI7CisJY2xvc2UoZmQpOworCXJldHVybiAwOworIGVycjoKKwljbG9zZShmZCk7CisJcmV0dXJuIC0xOworfQorCisvKgorICogd3JpdGVfbXNyCisgKgorICogV2lsbCByZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCAtMSBvbiBmYWlsdXJlLgorICogUG9zc2libGUgZXJybm8gdmFsdWVzIGNvdWxkIGJlOgorICogRUZBVUxUIC1JZiB0aGUgcmVhZC93cml0ZSBkaWQgbm90IGZ1bGx5IGNvbXBsZXRlCisgKiBFSU8gICAgLUlmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBNU1JzCisgKiBFTlhJTyAgLUlmIHRoZSBDUFUgZG9lcyBub3QgZXhpc3QKKyAqLworaW50IHdyaXRlX21zcihpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWR4LCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsKQoreworCWludCBmZDsKKwljaGFyIG1zcl9maWxlX25hbWVbNjRdOworCisJc3ByaW50Zihtc3JfZmlsZV9uYW1lLCAiL2Rldi9jcHUvJWQvbXNyIiwgY3B1KTsKKwlmZCA9IG9wZW4obXNyX2ZpbGVfbmFtZSwgT19XUk9OTFkpOworCWlmIChmZCA8IDApCisJCXJldHVybiAtMTsKKwlpZiAobHNlZWsoZmQsIGlkeCwgU0VFS19DVVIpID09IC0xKQorCQlnb3RvIGVycjsKKwlpZiAod3JpdGUoZmQsICZ2YWwsIHNpemVvZiB2YWwpICE9IHNpemVvZiB2YWwpCisJCWdvdG8gZXJyOworCWNsb3NlKGZkKTsKKwlyZXR1cm4gMDsKKyBlcnI6CisJY2xvc2UoZmQpOworCXJldHVybiAtMTsKK30KKworaW50IG1zcl9pbnRlbF9oYXNfYm9vc3Rfc3VwcG9ydCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBtaXNjX2VuYWJsZXM7CisJaW50IHJldDsKKworCXJldCA9IHJlYWRfbXNyKGNwdSwgTVNSX0lBMzJfTUlTQ19FTkFCTEVTLCAmbWlzY19lbmFibGVzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiAobWlzY19lbmFibGVzID4+IDM4KSAmIDB4MTsKK30KKworaW50IG1zcl9pbnRlbF9ib29zdF9pc19hY3RpdmUodW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgcGVyZl9zdGF0dXM7CisJaW50IHJldDsKKworCXJldCA9IHJlYWRfbXNyKGNwdSwgTVNSX0lBMzJfUEVSRl9TVEFUVVMsICZwZXJmX3N0YXR1cyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gKHBlcmZfc3RhdHVzID4+IDMyKSAmIDB4MTsKK30KKworaW50IG1zcl9pbnRlbF9nZXRfcGVyZl9iaWFzKHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKwlpbnQgcmV0OworCisJaWYgKCEoY3B1cG93ZXJfY3B1X2luZm8uY2FwcyAmIENQVVBPV0VSX0NBUF9QRVJGX0JJQVMpKQorCQlyZXR1cm4gLTE7CisKKwlyZXQgPSByZWFkX21zcihjcHUsIE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVMsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIHZhbDsKK30KKworaW50IG1zcl9pbnRlbF9zZXRfcGVyZl9iaWFzKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCB2YWwpCit7CisJaW50IHJldDsKKworCWlmICghKGNwdXBvd2VyX2NwdV9pbmZvLmNhcHMgJiBDUFVQT1dFUl9DQVBfUEVSRl9CSUFTKSkKKwkJcmV0dXJuIC0xOworCisJcmV0ID0gd3JpdGVfbXNyKGNwdSwgTVNSX0lBMzJfRU5FUkdZX1BFUkZfQklBUywgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3BjaS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGNjOTM4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9wY2kuYwpAQCAtMCwwICsxLDQ0IEBACisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorCisjaW5jbHVkZSA8aGVscGVycy9oZWxwZXJzLmg+CisKKy8qCisgKiBwY2lfYWNjX2luaXQKKyAqCisgKiBQQ0kgYWNjZXNzIGhlbHBlciBmdW5jdGlvbiBkZXBlbmRpbmcgb24gbGlicGNpCisgKgorICogKipwYWNjIDogaWYgYSB2YWxpZCBwY2lfZGV2IGlzIHJldHVybmVkCisgKiAgICAgICAgICpwYWNjIG11c3QgYmUgcGFzc2VkIHRvIHBjaV9hY2NfY2xlYW51cCB0byBmcmVlIGl0CisgKgorICogdmVuZG9yX2lkIDogdGhlIHBjaSB2ZW5kb3IgaWQgbWF0Y2hpbmcgdGhlIHBjaSBkZXZpY2UgdG8gYWNjZXNzCisgKiBkZXZfaWRzIDogICBkZXZpY2UgaWRzIG1hdGNoaW5nIHRoZSBwY2kgZGV2aWNlIHRvIGFjY2VzcworICoKKyAqIFJldHVybnMgOgorICogc3RydWN0IHBjaV9kZXYgd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBwY2lfe3JlYWQsd3JpdGV9XyogZnVuY3Rpb25zCisgKiAgICAgICAgICAgICAgICB0byBhY2Nlc3MgdGhlIFBDSSBjb25maWcgc3BhY2Ugb2YgbWF0Y2hpbmcgcGNpIGRldmljZXMKKyAqLworc3RydWN0IHBjaV9kZXYgKnBjaV9hY2NfaW5pdChzdHJ1Y3QgcGNpX2FjY2VzcyAqKnBhY2MsIGludCB2ZW5kb3JfaWQsCisJCQkJICAgIGludCAqZGV2X2lkcykKK3sKKwlzdHJ1Y3QgcGNpX2ZpbHRlciBmaWx0ZXJfbmJfbGluayA9IHsgLTEsIC0xLCAtMSwgLTEsIHZlbmRvcl9pZCwgMH07CisJc3RydWN0IHBjaV9kZXYgKmRldmljZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCSpwYWNjID0gcGNpX2FsbG9jKCk7CisJaWYgKCpwYWNjID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJcGNpX2luaXQoKnBhY2MpOworCXBjaV9zY2FuX2J1cygqcGFjYyk7CisKKwlmb3IgKGkgPSAwOyBkZXZfaWRzW2ldICE9IDA7IGkrKykgeworCQlmaWx0ZXJfbmJfbGluay5kZXZpY2UgPSBkZXZfaWRzW2ldOworCQlmb3IgKGRldmljZT0oKnBhY2MpLT5kZXZpY2VzOyBkZXZpY2U7IGRldmljZSA9IGRldmljZS0+bmV4dCkgeworCQkJaWYgKHBjaV9maWx0ZXJfbWF0Y2goJmZpbHRlcl9uYl9saW5rLCBkZXZpY2UpKQorCQkJCXJldHVybiBkZXZpY2U7CisJCX0KKwl9CisJcGNpX2NsZWFudXAoKnBhY2MpOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvc3lzZnMuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzUzNGU3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9zeXNmcy5jCkBAIC0wLDAgKzEsMzUwIEBACisvKgorICogIChDKSAyMDA0LTIwMDkgIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLmRlPgorICogIChDKSAyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQG5vdmVsbC5jb20+IE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImhlbHBlcnMvc3lzZnMuaCIKKwordW5zaWduZWQgaW50IHN5c2ZzX3JlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisJaW50IGZkOworCXNpemVfdCBudW1yZWFkOworCisJaWYgKCAoIGZkID0gb3BlbihwYXRoLCBPX1JET05MWSkgKSA9PSAtMSApCisJCXJldHVybiAwOworCisJbnVtcmVhZCA9IHJlYWQoZmQsIGJ1ZiwgYnVmbGVuIC0gMSk7CisJaWYgKCBudW1yZWFkIDwgMSApCisJeworCQljbG9zZShmZCk7CisJCXJldHVybiAwOworCX0KKworCWJ1ZltudW1yZWFkXSA9ICdcMCc7CisJY2xvc2UoZmQpOworCisJcmV0dXJuIG51bXJlYWQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3lzZnNfd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLAorCQkJCSAgICAgY29uc3QgY2hhciAqdmFsdWUsIHNpemVfdCBsZW4pCit7CisJaW50IGZkOworCXNpemVfdCBudW13cml0ZTsKKworCWlmICggKCBmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpICkgPT0gLTEgKQorCQlyZXR1cm4gMDsKKworCW51bXdyaXRlID0gd3JpdGUoZmQsIHZhbHVlLCBsZW4pOworCWlmICggbnVtd3JpdGUgPCAxICkKKwl7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIDA7CisJfQorCWNsb3NlKGZkKTsKKwlyZXR1cm4gbnVtd3JpdGU7Cit9CisKKy8qIENQVWlkbGUgaWRsZXN0YXRlIHNwZWNpZmljIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvY3B1aWRsZS8gYWNjZXNzICovCisKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb24gdG8gcmVhZCBmaWxlIGZyb20gL3N5cyBpbnRvIGdpdmVuIGJ1ZmZlcgorICogZm5hbWUgaXMgYSByZWxhdGl2ZSBwYXRoIHVuZGVyICJjcHVYL2NwdWlkbGUvc3RhdGVYLyIgZGlyCisgKiBjc3RhdGVzIHN0YXJ0aW5nIHdpdGggMCwgQzAgaXMgbm90IGNvdW50ZWQgYXMgY3N0YXRlLgorICogVGhpcyBtZWFucyBpZiB5b3Ugd2FudCBDMSBpbmZvLCBwYXNzIDAgYXMgaWRsZXN0YXRlIHBhcmFtCisgKi8KK3Vuc2lnbmVkIGludCBzeXNmc19pZGxlc3RhdGVfcmVhZF9maWxlKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBpZGxlc3RhdGUsCisJCQkgICAgIGNvbnN0IGNoYXIgKmZuYW1lLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisJY2hhciBwYXRoW1NZU0ZTX1BBVEhfTUFYXTsKKwlpbnQgZmQ7CisJc2l6ZV90IG51bXJlYWQ7CisKKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFBBVEhfVE9fQ1BVICJjcHUldS9jcHVpZGxlL3N0YXRlJXUvJXMiLAorCQkgY3B1LCBpZGxlc3RhdGUsIGZuYW1lKTsKKworCWlmICggKCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpICkgPT0gLTEgKQorCQlyZXR1cm4gMDsKKworCW51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpOworCWlmICggbnVtcmVhZCA8IDEgKQorCXsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlidWZbbnVtcmVhZF0gPSAnXDAnOworCWNsb3NlKGZkKTsKKworCXJldHVybiBudW1yZWFkOworfQorCisvKiByZWFkIGFjY2VzcyB0byBmaWxlcyB3aGljaCBjb250YWluIG9uZSBudW1lcmljIHZhbHVlICovCisKK2VudW0gaWRsZXN0YXRlX3ZhbHVlIHsKKwlJRExFU1RBVEVfVVNBR0UsCisJSURMRVNUQVRFX1BPV0VSLAorCUlETEVTVEFURV9MQVRFTkNZLAorCUlETEVTVEFURV9USU1FLAorCU1BWF9JRExFU1RBVEVfVkFMVUVfRklMRVMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICppZGxlc3RhdGVfdmFsdWVfZmlsZXNbTUFYX0lETEVTVEFURV9WQUxVRV9GSUxFU10gPSB7CisJW0lETEVTVEFURV9VU0FHRV0gPSAidXNhZ2UiLAorCVtJRExFU1RBVEVfUE9XRVJdID0gInBvd2VyIiwKKwlbSURMRVNUQVRFX0xBVEVOQ1ldID0gImxhdGVuY3kiLAorCVtJRExFU1RBVEVfVElNRV0gID0gInRpbWUiLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBzeXNmc19pZGxlc3RhdGVfZ2V0X29uZV92YWx1ZSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgaWRsZXN0YXRlLAorCQkJCQkJICAgICBlbnVtIGlkbGVzdGF0ZV92YWx1ZSB3aGljaCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7CisJdW5zaWduZWQgaW50IGxlbjsKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwljaGFyICplbmRwOworCisJaWYgKCB3aGljaCA+PSBNQVhfSURMRVNUQVRFX1ZBTFVFX0ZJTEVTICkKKwkJcmV0dXJuIDA7CisKKwlpZiAoICggbGVuID0gc3lzZnNfaWRsZXN0YXRlX3JlYWRfZmlsZShjcHUsIGlkbGVzdGF0ZSwKKwkJCQkJICAgIGlkbGVzdGF0ZV92YWx1ZV9maWxlc1t3aGljaF0sCisJCQkJCSAgICBsaW5lYnVmLCBzaXplb2YobGluZWJ1ZikpKSA9PSAwICkKKwl7CisJCXJldHVybiAwOworCX0KKworCXZhbHVlID0gc3RydG91bGwobGluZWJ1ZiwgJmVuZHAsIDApOworCisJaWYgKCBlbmRwID09IGxpbmVidWYgfHwgZXJybm8gPT0gRVJBTkdFICkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qIHJlYWQgYWNjZXNzIHRvIGZpbGVzIHdoaWNoIGNvbnRhaW4gb25lIHN0cmluZyAqLworCitlbnVtIGlkbGVzdGF0ZV9zdHJpbmcgeworCUlETEVTVEFURV9ERVNDLAorCUlETEVTVEFURV9OQU1FLAorCU1BWF9JRExFU1RBVEVfU1RSSU5HX0ZJTEVTCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqaWRsZXN0YXRlX3N0cmluZ19maWxlc1tNQVhfSURMRVNUQVRFX1NUUklOR19GSUxFU10gPSB7CisJW0lETEVTVEFURV9ERVNDXSA9ICJkZXNjIiwKKwlbSURMRVNUQVRFX05BTUVdID0gIm5hbWUiLAorfTsKKworCitzdGF0aWMgY2hhciAqIHN5c2ZzX2lkbGVzdGF0ZV9nZXRfb25lX3N0cmluZyh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkgIHVuc2lnbmVkIGludCBpZGxlc3RhdGUsCisJCQkJCSAgZW51bSBpZGxlc3RhdGVfc3RyaW5nIHdoaWNoKQoreworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCWNoYXIgKnJlc3VsdDsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJaWYgKHdoaWNoID49IE1BWF9JRExFU1RBVEVfU1RSSU5HX0ZJTEVTKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICggKCBsZW4gPSBzeXNmc19pZGxlc3RhdGVfcmVhZF9maWxlKGNwdSwgaWRsZXN0YXRlLAorCQkJCQkgICAgaWRsZXN0YXRlX3N0cmluZ19maWxlc1t3aGljaF0sCisJCQkJCSAgICBsaW5lYnVmLCBzaXplb2YobGluZWJ1ZikpKSA9PSAwICkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoICggcmVzdWx0ID0gc3RyZHVwKGxpbmVidWYpICkgPT0gTlVMTCApCisJCXJldHVybiBOVUxMOworCisJaWYgKHJlc3VsdFtzdHJsZW4ocmVzdWx0KSAtIDFdID09ICdcbicpCisJCXJlc3VsdFtzdHJsZW4ocmVzdWx0KSAtIDFdID0gJ1wwJzsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIGxvbmcgc3lzZnNfZ2V0X2lkbGVzdGF0ZV9sYXRlbmN5KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBpZGxlc3RhdGUpCit7CisJcmV0dXJuIHN5c2ZzX2lkbGVzdGF0ZV9nZXRfb25lX3ZhbHVlKGNwdSwgaWRsZXN0YXRlLCBJRExFU1RBVEVfTEFURU5DWSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgc3lzZnNfZ2V0X2lkbGVzdGF0ZV91c2FnZSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWRsZXN0YXRlKQoreworCXJldHVybiBzeXNmc19pZGxlc3RhdGVfZ2V0X29uZV92YWx1ZShjcHUsIGlkbGVzdGF0ZSwgSURMRVNUQVRFX1VTQUdFKTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIHN5c2ZzX2dldF9pZGxlc3RhdGVfdGltZSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWRsZXN0YXRlKQoreworCXJldHVybiBzeXNmc19pZGxlc3RhdGVfZ2V0X29uZV92YWx1ZShjcHUsIGlkbGVzdGF0ZSwgSURMRVNUQVRFX1RJTUUpOworfQorCitjaGFyICogc3lzZnNfZ2V0X2lkbGVzdGF0ZV9uYW1lKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBpZGxlc3RhdGUpCit7CisJcmV0dXJuIHN5c2ZzX2lkbGVzdGF0ZV9nZXRfb25lX3N0cmluZyhjcHUsIGlkbGVzdGF0ZSwgSURMRVNUQVRFX05BTUUpOworfQorCitjaGFyICogc3lzZnNfZ2V0X2lkbGVzdGF0ZV9kZXNjKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBpZGxlc3RhdGUpCit7CisJcmV0dXJuIHN5c2ZzX2lkbGVzdGF0ZV9nZXRfb25lX3N0cmluZyhjcHUsIGlkbGVzdGF0ZSwgSURMRVNUQVRFX0RFU0MpOworfQorCisvKgorICogUmV0dXJucyBudW1iZXIgb2Ygc3VwcG9ydGVkIEMtc3RhdGVzIG9mIENQVSBjb3JlIGNwdQorICogTmVnYXRpdiBpbiBlcnJvciBjYXNlCisgKiBaZXJvIGlmIGNwdWlkbGUgZG9lcyBub3QgZXhwb3J0IGFueSBDLXN0YXRlcworICovCitpbnQgc3lzZnNfZ2V0X2lkbGVzdGF0ZV9jb3VudCh1bnNpZ25lZCBpbnQgY3B1KQoreworCWNoYXIgZmlsZVtTWVNGU19QQVRIX01BWF07CisJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKwlpbnQgaWRsZXN0YXRlcyA9IDE7CisKKworCXNucHJpbnRmKGZpbGUsIFNZU0ZTX1BBVEhfTUFYLCBQQVRIX1RPX0NQVSAiY3B1aWRsZSIpOworCWlmICggc3RhdChmaWxlLCAmc3RhdGJ1ZikgIT0gMCB8fCAhU19JU0RJUihzdGF0YnVmLnN0X21vZGUpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNucHJpbnRmKGZpbGUsIFNZU0ZTX1BBVEhfTUFYLCBQQVRIX1RPX0NQVSAiY3B1JXUvY3B1aWRsZS9zdGF0ZTAiLCBjcHUpOworCWlmICggc3RhdChmaWxlLCAmc3RhdGJ1ZikgIT0gMCB8fCAhU19JU0RJUihzdGF0YnVmLnN0X21vZGUpKQorCQlyZXR1cm4gMDsKKworCXdoaWxlKHN0YXQoZmlsZSwgJnN0YXRidWYpID09IDAgJiYgU19JU0RJUihzdGF0YnVmLnN0X21vZGUpKSB7CisJCXNucHJpbnRmKGZpbGUsIFNZU0ZTX1BBVEhfTUFYLCBQQVRIX1RPX0NQVQorCQkJICJjcHUldS9jcHVpZGxlL3N0YXRlJWQiLCBjcHUsIGlkbGVzdGF0ZXMpOworCQlpZGxlc3RhdGVzKys7CisJfQorCWlkbGVzdGF0ZXMtLTsKKwlyZXR1cm4gaWRsZXN0YXRlczsKK30KKworLyogQ1BVaWRsZSBnZW5lcmFsIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdWlkbGUvIHN5c2ZzIGFjY2VzcyAqKioqKioqKi8KKworLyoKKyAqIGhlbHBlciBmdW5jdGlvbiB0byByZWFkIGZpbGUgZnJvbSAvc3lzIGludG8gZ2l2ZW4gYnVmZmVyCisgKiBmbmFtZSBpcyBhIHJlbGF0aXZlIHBhdGggdW5kZXIgImNwdS9jcHVpZGxlLyIgZGlyCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3lzZnNfY3B1aWRsZV9yZWFkX2ZpbGUoY29uc3QgY2hhciAqZm5hbWUsIGNoYXIgKmJ1ZiwKKwkJCQkJICAgIHNpemVfdCBidWZsZW4pCit7CisJY2hhciBwYXRoW1NZU0ZTX1BBVEhfTUFYXTsKKworCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgUEFUSF9UT19DUFUgImNwdWlkbGUvJXMiLCBmbmFtZSk7CisKKwlyZXR1cm4gc3lzZnNfcmVhZF9maWxlKHBhdGgsIGJ1ZiwgYnVmbGVuKTsKK30KKworCisKKy8qIHJlYWQgYWNjZXNzIHRvIGZpbGVzIHdoaWNoIGNvbnRhaW4gb25lIHN0cmluZyAqLworCitlbnVtIGNwdWlkbGVfc3RyaW5nIHsKKwlDUFVJRExFX0dPVkVSTk9SLAorCUNQVUlETEVfR09WRVJOT1JfUk8sCisJQ1BVSURMRV9EUklWRVIsCisJTUFYX0NQVUlETEVfU1RSSU5HX0ZJTEVTCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqY3B1aWRsZV9zdHJpbmdfZmlsZXNbTUFYX0NQVUlETEVfU1RSSU5HX0ZJTEVTXSA9IHsKKwlbQ1BVSURMRV9HT1ZFUk5PUl0JPSAiY3VycmVudF9nb3Zlcm5vciIsCisJW0NQVUlETEVfR09WRVJOT1JfUk9dCT0gImN1cnJlbnRfZ292ZXJub3Jfcm8iLAorCVtDUFVJRExFX0RSSVZFUl0JPSAiY3VycmVudF9kcml2ZXIiLAorfTsKKworCitzdGF0aWMgY2hhciAqIHN5c2ZzX2NwdWlkbGVfZ2V0X29uZV9zdHJpbmcoZW51bSBjcHVpZGxlX3N0cmluZyB3aGljaCkKK3sKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwljaGFyICpyZXN1bHQ7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmICh3aGljaCA+PSBNQVhfQ1BVSURMRV9TVFJJTkdfRklMRVMpCisJCXJldHVybiBOVUxMOworCisJaWYgKCAoIGxlbiA9IHN5c2ZzX2NwdWlkbGVfcmVhZF9maWxlKGNwdWlkbGVfc3RyaW5nX2ZpbGVzW3doaWNoXSwKKwkJCQkJICAgIGxpbmVidWYsIHNpemVvZihsaW5lYnVmKSkpID09IDAgKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICggKCByZXN1bHQgPSBzdHJkdXAobGluZWJ1ZikgKSA9PSBOVUxMICkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocmVzdWx0W3N0cmxlbihyZXN1bHQpIC0gMV0gPT0gJ1xuJykKKwkJcmVzdWx0W3N0cmxlbihyZXN1bHQpIC0gMV0gPSAnXDAnOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworY2hhciAqIHN5c2ZzX2dldF9jcHVpZGxlX2dvdmVybm9yKHZvaWQpCit7CisJY2hhciAqdG1wID0gc3lzZnNfY3B1aWRsZV9nZXRfb25lX3N0cmluZyhDUFVJRExFX0dPVkVSTk9SX1JPKTsKKwlpZiAoIXRtcCkKKwkJcmV0dXJuIHN5c2ZzX2NwdWlkbGVfZ2V0X29uZV9zdHJpbmcoQ1BVSURMRV9HT1ZFUk5PUik7CisJZWxzZQorCQlyZXR1cm4gdG1wOworfQorCitjaGFyICogc3lzZnNfZ2V0X2NwdWlkbGVfZHJpdmVyKHZvaWQpCit7CisJcmV0dXJuIHN5c2ZzX2NwdWlkbGVfZ2V0X29uZV9zdHJpbmcoQ1BVSURMRV9EUklWRVIpOworfQorLyogQ1BVaWRsZSBpZGxlc3RhdGUgc3BlY2lmaWMgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC9jcHVpZGxlLyBhY2Nlc3MgKi8KKworLyoKKyAqIEdldCBzY2hlZF9tYyBvciBzY2hlZF9zbXQgc2V0dGluZ3MKKyAqIFBhc3MgIm1jIiBvciAic210IiBhcyBhcmd1bWVudAorICoKKyAqIFJldHVybnMgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQorICovCitpbnQgc3lzZnNfZ2V0X3NjaGVkKGNvbnN0IGNoYXIqIHNtdF9tYykKK3sKKyAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwljaGFyICplbmRwOworCWNoYXIgcGF0aFtTWVNGU19QQVRIX01BWF07CisKKwlpZiAoc3RyY21wKCJtYyIsIHNtdF9tYykgJiYgc3RyY21wKCJzbXQiLCBzbXRfbWMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgUEFUSF9UT19DUFUgInNjaGVkXyVzX3Bvd2VyX3NhdmluZ3MiLCBzbXRfbWMpOworCWlmIChzeXNmc19yZWFkX2ZpbGUocGF0aCwgbGluZWJ1ZiwgTUFYX0xJTkVfTEVOKSA9PSAwICkKKwkJcmV0dXJuIC0xOworCXZhbHVlID0gc3RydG91bChsaW5lYnVmLCAmZW5kcCwgMCk7CisJaWYgKCBlbmRwID09IGxpbmVidWYgfHwgZXJybm8gPT0gRVJBTkdFICkKKwkJcmV0dXJuIC0xOworCXJldHVybiB2YWx1ZTsKK30KKworLyoKKyAqIEdldCBzY2hlZF9tYyBvciBzY2hlZF9zbXQgc2V0dGluZ3MKKyAqIFBhc3MgIm1jIiBvciAic210IiBhcyBhcmd1bWVudAorICoKKyAqIFJldHVybnMgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQorICovCitpbnQgc3lzZnNfc2V0X3NjaGVkKGNvbnN0IGNoYXIqIHNtdF9tYywgaW50IHZhbCkKK3sKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwljaGFyIHBhdGhbU1lTRlNfUEFUSF9NQVhdOworCXN0cnVjdCBzdGF0IHN0YXRidWY7CisKKwlpZiAoc3RyY21wKCJtYyIsIHNtdF9tYykgJiYgc3RyY21wKCJzbXQiLCBzbXRfbWMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgUEFUSF9UT19DUFUgInNjaGVkXyVzX3Bvd2VyX3NhdmluZ3MiLCBzbXRfbWMpOworCXNwcmludGYobGluZWJ1ZiwgIiVkIiwgdmFsKTsKKworCWlmICggc3RhdChwYXRoLCAmc3RhdGJ1ZikgIT0gMCApCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHN5c2ZzX3dyaXRlX2ZpbGUocGF0aCwgbGluZWJ1ZiwgTUFYX0xJTkVfTEVOKSA9PSAwICkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9zeXNmcy5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9zeXNmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMDJkMmYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3N5c2ZzLmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfX0NQVVBPV0VSX0hFTFBFUlNfU1lTRlNfSF9fCisjZGVmaW5lIF9fQ1BVUE9XRVJfSEVMUEVSU19TWVNGU19IX18KKworI2RlZmluZSBQQVRIX1RPX0NQVSAiL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvIgorI2RlZmluZSBNQVhfTElORV9MRU4gMjU1CisjZGVmaW5lIFNZU0ZTX1BBVEhfTUFYIDI1NQorCitleHRlcm4gdW5zaWduZWQgaW50IHN5c2ZzX3JlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNmc19nZXRfaWRsZXN0YXRlX2xhdGVuY3kodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGlkbGVzdGF0ZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNmc19nZXRfaWRsZXN0YXRlX3VzYWdlKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBpZGxlc3RhdGUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBzeXNmc19nZXRfaWRsZXN0YXRlX3RpbWUodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IGlkbGVzdGF0ZSk7CitleHRlcm4gY2hhciAqIHN5c2ZzX2dldF9pZGxlc3RhdGVfbmFtZSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWRsZXN0YXRlKTsKK2V4dGVybiBjaGFyICogc3lzZnNfZ2V0X2lkbGVzdGF0ZV9kZXNjKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBpZGxlc3RhdGUpOworZXh0ZXJuIGludCBzeXNmc19nZXRfaWRsZXN0YXRlX2NvdW50KHVuc2lnbmVkIGludCBjcHUpOworCitleHRlcm4gY2hhciAqIHN5c2ZzX2dldF9jcHVpZGxlX2dvdmVybm9yKHZvaWQpOworZXh0ZXJuIGNoYXIgKiBzeXNmc19nZXRfY3B1aWRsZV9kcml2ZXIodm9pZCk7CisKK2V4dGVybiBpbnQgc3lzZnNfZ2V0X3NjaGVkKGNvbnN0IGNoYXIqIHNtdF9tYyk7CitleHRlcm4gaW50IHN5c2ZzX3NldF9zY2hlZChjb25zdCBjaGFyKiBzbXRfbWMsIGludCB2YWwpOworCisjZW5kaWYgLyogX19DUFVQT1dFUl9IRUxQRVJTX1NZU0ZTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy90b3BvbG9neS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy90b3BvbG9neS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZDg0MmIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3RvcG9sb2d5LmMKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqIFRvRG86IE5lZWRzIHRvIGJlIGRvbmUgbW9yZSBwcm9wZXJseSBmb3IgQU1EL0ludGVsIHNwZWNpZmljcworICovCisKKy8qIEhlbHBlciBzdHJ1Y3QgZm9yIHFzb3J0LCBtdXN0IGJlIGluIHN5bmMgd2l0aCBjcHVwb3dlcl90b3BvbG9neS5jcHVfaW5mbyAqLworLyogQmUgY2FyZWZ1bDogTmVlZCB0byBwYXNzIHVuc2lnbmVkIHRvIHRoZSBzb3J0LCBzbyB0aGF0IG9mZmxpbmVkIGNvcmVzIGFyZQorICAgaW4gdGhlIGVuZCwgYnV0IGRvdWJsZSBjaGVjayBmb3IgLTEgZm9yIG9mZmxpbmVkIGNwdXMgYXQgb3RoZXIgcGxhY2VzICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgPGhlbHBlcnMvaGVscGVycy5oPgorI2luY2x1ZGUgPGhlbHBlcnMvc3lzZnMuaD4KKworLyogcmV0dXJucyAtMSBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3MgKi8KK2ludCBzeXNmc190b3BvbG9neV9yZWFkX2ZpbGUodW5zaWduZWQgaW50IGNwdSwgY29uc3QgY2hhciAqZm5hbWUpCit7CisgCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJY2hhciAqZW5kcDsKKwljaGFyIHBhdGhbU1lTRlNfUEFUSF9NQVhdOworCisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBQQVRIX1RPX0NQVSAiY3B1JXUvdG9wb2xvZ3kvJXMiLAorCQkJIGNwdSwgZm5hbWUpOworCWlmIChzeXNmc19yZWFkX2ZpbGUocGF0aCwgbGluZWJ1ZiwgTUFYX0xJTkVfTEVOKSA9PSAwICkKKwkJcmV0dXJuIC0xOworCXZhbHVlID0gc3RydG91bChsaW5lYnVmLCAmZW5kcCwgMCk7CisJaWYgKCBlbmRwID09IGxpbmVidWYgfHwgZXJybm8gPT0gRVJBTkdFICkKKwkJcmV0dXJuIC0xOworCXJldHVybiB2YWx1ZTsKK30KKworc3RydWN0IGNwdWlkX2NvcmVfaW5mbyB7CisJdW5zaWduZWQgaW50IHBrZzsKKwl1bnNpZ25lZCBpbnQgdGhyZWFkOworCXVuc2lnbmVkIGludCBjcHU7Cit9OworCitzdGF0aWMgaW50IF9fY29tcGFyZShjb25zdCB2b2lkICp0MSwgY29uc3Qgdm9pZCAqdDIpCit7CisJc3RydWN0IGNwdWlkX2NvcmVfaW5mbyAqdG9wMSA9IChzdHJ1Y3QgY3B1aWRfY29yZV9pbmZvICopdDE7CisJc3RydWN0IGNwdWlkX2NvcmVfaW5mbyAqdG9wMiA9IChzdHJ1Y3QgY3B1aWRfY29yZV9pbmZvICopdDI7CisJaWYgKHRvcDEtPnBrZyA8IHRvcDItPnBrZykKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKHRvcDEtPnBrZyA+IHRvcDItPnBrZykKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAodG9wMS0+dGhyZWFkIDwgdG9wMi0+dGhyZWFkKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAodG9wMS0+dGhyZWFkID4gdG9wMi0+dGhyZWFkKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmICh0b3AxLT5jcHUgPCB0b3AyLT5jcHUpCisJCXJldHVybiAtMTsKKwllbHNlIGlmICh0b3AxLT5jcHUgPiB0b3AyLT5jcHUpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXR1cm5zIGFtb3VudCBvZiBjcHVzLCBuZWdhdGl2ZSBvbiBlcnJvciwgY3B1X3RvcCBtdXN0IGJlCisgKiBwYXNzZWQgdG8gY3B1X3RvcG9sb2d5X3JlbGVhc2UgdG8gZnJlZSByZXNvdXJjZXMKKyAqCisgKiBBcnJheSBpcyBzb3J0ZWQgYWZ0ZXIgLT5wa2csIC0+Y29yZSwgdGhlbiAtPmNwdQorICovCitpbnQgZ2V0X2NwdV90b3BvbG9neShzdHJ1Y3QgY3B1cG93ZXJfdG9wb2xvZ3kgKmNwdV90b3ApCit7CisJaW50IGNwdSwgY3B1cyA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX0NPTkYpOworCisJY3B1X3RvcC0+Y29yZV9pbmZvID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1cG93ZXJfdG9wb2xvZ3kpICogY3B1cyk7CisJaWYgKGNwdV90b3AtPmNvcmVfaW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwljcHVfdG9wLT5wa2dzID0gY3B1X3RvcC0+Y29yZXMgPSAwOworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1czsgY3B1KyspIHsKKwkJY3B1X3RvcC0+Y29yZV9pbmZvW2NwdV0ucGtnID0KKwkJCXN5c2ZzX3RvcG9sb2d5X3JlYWRfZmlsZShjcHUsICJwaHlzaWNhbF9wYWNrYWdlX2lkIik7CisJCWlmICgoaW50KWNwdV90b3AtPmNvcmVfaW5mb1tjcHVdLnBrZyAhPSAtMSAmJgorCQkgICAgY3B1X3RvcC0+Y29yZV9pbmZvW2NwdV0ucGtnID4gY3B1X3RvcC0+cGtncykKKwkJCWNwdV90b3AtPnBrZ3MgPSBjcHVfdG9wLT5jb3JlX2luZm9bY3B1XS5wa2c7CisJCWNwdV90b3AtPmNvcmVfaW5mb1tjcHVdLmNvcmUgPQorCQkJc3lzZnNfdG9wb2xvZ3lfcmVhZF9maWxlKGNwdSwgImNvcmVfaWQiKTsKKwkJY3B1X3RvcC0+Y29yZV9pbmZvW2NwdV0uY3B1ID0gY3B1OworCX0KKwljcHVfdG9wLT5wa2dzKys7CisKKwlxc29ydChjcHVfdG9wLT5jb3JlX2luZm8sIGNwdXMsIHNpemVvZihzdHJ1Y3QgY3B1aWRfY29yZV9pbmZvKSwKKwkgICAgICBfX2NvbXBhcmUpOworCisJLyogSW50ZWwncyBjb3JlcyBjb3VudCBpcyBub3QgY29uc2VjdXRpdmVseSBudW1iZXJlZCwgdGhlcmUgbWF5CisJICogYmUgYSBjb3JlX2lkIG9mIDMsIGJ1dCBub25lIG9mIDIuIEFzc3VtZSB0aGVyZSBhbHdheXMgaXMgMAorCSAqIEdldCBhbW91bnQgb2YgY29yZXMgYnkgY291bnRpbmcgZHVwbGljYXRlcyBpbiBhIHBhY2thZ2UKKwlmb3IgKGNwdSA9IDA7IGNwdV90b3AtPmNvcmVfaW5mb1tjcHVdLnBrZyA9IDAgJiYgY3B1IDwgY3B1czsgY3B1KyspIHsKKwkJaWYgKGNwdV90b3AtPmNvcmVfaW5mb1tjcHVdLmNvcmUgPT0gMCkKKwljcHVfdG9wLT5jb3JlcysrOworCSovCisJcmV0dXJuIGNwdXM7Cit9CisKK3ZvaWQgY3B1X3RvcG9sb2d5X3JlbGVhc2Uoc3RydWN0IGNwdXBvd2VyX3RvcG9sb2d5IGNwdV90b3ApCit7CisJZnJlZShjcHVfdG9wLmNvcmVfaW5mbyk7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlOTQzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYwpAQCAtMCwwICsxLDM0MCBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiAgUENJIGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIGV4YW1wbGUgY29kZSBmcm9tOgorICogIEFuZHJlYXMgSGVycm1hbm4gPGFuZHJlYXMuaGVycm1hbm4zQGFtZC5jb20+CisgKi8KKworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8cGNpL3BjaS5oPgorCisjaW5jbHVkZSAiaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKworLyoqKioqKioqIFBDSSBwYXJ0cyBjb3VsZCBnbyBpbnRvIG93biBmaWxlIGFuZCBnZXQgc2hhcmVkICoqKioqKioqKioqKioqKi8KKworI2RlZmluZSBQQ0lfTk9OX1BDMF9PRkZTRVQJMHhiMAorI2RlZmluZSBQQ0lfUEMxX09GRlNFVAkJMHhiNAorI2RlZmluZSBQQ0lfUEM2X09GRlNFVAkJMHhiOAorCisjZGVmaW5lIFBDSV9NT05JVE9SX0VOQUJMRV9SRUcgIDB4ZTAKKworI2RlZmluZSBQQ0lfTk9OX1BDMF9FTkFCTEVfQklUCTAKKyNkZWZpbmUgUENJX1BDMV9FTkFCTEVfQklUCTEKKyNkZWZpbmUgUENJX1BDNl9FTkFCTEVfQklUCTIKKworI2RlZmluZSBQQ0lfTkJQMV9TVEFUX09GRlNFVAkweDk4CisjZGVmaW5lIFBDSV9OQlAxX0FDVElWRV9CSVQJMgorI2RlZmluZSBQQ0lfTkJQMV9FTlRFUkVEX0JJVAkxCisKKyNkZWZpbmUgUENJX05CUDFfQ0FQX09GRlNFVAkweDkwCisjZGVmaW5lIFBDSV9OQlAxX0NBUEFCTEVfQklUICAgIDMxCisKKyNkZWZpbmUgT1ZFUkZMT1dfTVMJCTM0MzU5NyAvKiAzMiBiaXQgcmVnaXN0ZXIgZmlsbGVkIGF0IDEyNTAwIEhaCisJCQkJCSAgKDEgdGljayBwZXIgODBucykgKi8KKworZW51bSBhbWRfZmFtMTRoX3N0YXRlcyB7Tk9OX1BDMCA9IDAsIFBDMSwgUEM2LCBOQlAxLAorCQkJQU1EX0ZBTTE0SF9TVEFURV9OVU19OworCitzdGF0aWMgaW50IGZhbTE0aF9nZXRfY291bnRfcGVyY2VudCh1bnNpZ25lZCBpbnQgc2VsZl9pZCwgZG91YmxlICpwZXJjZW50LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgY3B1KTsKK3N0YXRpYyBpbnQgZmFtMTRoX25icDFfY291bnQodW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBsb25nIGxvbmcgKmNvdW50LAorCQkJICAgICB1bnNpZ25lZCBpbnQgY3B1KTsKKworc3RhdGljIGNzdGF0ZV90IGFtZF9mYW0xNGhfY3N0YXRlc1tBTURfRkFNMTRIX1NUQVRFX05VTV0gPSB7CisJeworCQkubmFtZQkJCT0gIiFQQzAiLAorCQkuZGVzYwkJCT0gTl8oIlBhY2thZ2UgaW4gc2xlZXAgc3RhdGUgKFBDMSBvciBkZWVwZXIpIiksCisJCS5pZAkJCT0gTk9OX1BDMCwKKwkJLnJhbmdlCQkJPSBSQU5HRV9QQUNLQUdFLAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBmYW0xNGhfZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiUEMxIiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgUGFja2FnZSBDMSIpLAorCQkuaWQJCQk9IFBDMSwKKwkJLnJhbmdlCQkJPSBSQU5HRV9QQUNLQUdFLAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBmYW0xNGhfZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiUEM2IiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgUGFja2FnZSBDNiIpLAorCQkuaWQJCQk9IFBDNiwKKwkJLnJhbmdlCQkJPSBSQU5HRV9QQUNLQUdFLAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBmYW0xNGhfZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiTkJQMSIsCisJCS5kZXNjCQkJPSBOXygiTm9ydGggQnJpZGdlIFAxIGJvb2xlYW4gY291bnRlciAocmV0dXJucyAwIG9yIDEpIiksCisJCS5pZAkJCT0gTkJQMSwKKwkJLnJhbmdlCQkJPSBSQU5HRV9QQUNLQUdFLAorCQkuZ2V0X2NvdW50CQk9IGZhbTE0aF9uYnAxX2NvdW50LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9hY2Nlc3MgKnBjaV9hY2M7CitzdGF0aWMgaW50IHBjaV92ZW5kb3JfaWQgPSAweDEwMjI7CitzdGF0aWMgaW50IHBjaV9kZXZfaWRzWzJdID0gezB4MTcxNiwgMH07CitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmFtZF9mYW0xNGhfcGNpX2RldjsKKworc3RhdGljIGludCBuYnAxX2VudGVyZWQ7CisKK3N0cnVjdCB0aW1lc3BlYyBzdGFydF90aW1lOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lZGlmZjsKKworI2lmZGVmIERFQlVHCitzdHJ1Y3QgdGltZXNwZWMgZGJnX3RpbWU7Citsb25nIGRiZ190aW1lZGlmZjsKKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICpwcmV2aW91c19jb3VudFtBTURfRkFNMTRIX1NUQVRFX05VTV07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICpjdXJyZW50X2NvdW50W0FNRF9GQU0xNEhfU1RBVEVfTlVNXTsKKworc3RhdGljIGludCBhbWRfZmFtMTRoX2dldF9wY2lfaW5mbyhzdHJ1Y3QgY3N0YXRlICpzdGF0ZSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgKnBjaV9vZmZzZXQsCisJCQkJICAgdW5zaWduZWQgaW50ICplbmFibGVfYml0LAorCQkJCSAgIHVuc2lnbmVkIGludCBjcHUpCit7CisJc3dpdGNoKHN0YXRlLT5pZCkgeworCWNhc2UgTk9OX1BDMDoKKwkJKmVuYWJsZV9iaXQgPSBQQ0lfTk9OX1BDMF9FTkFCTEVfQklUOworCQkqcGNpX29mZnNldCA9IFBDSV9OT05fUEMwX09GRlNFVDsKKwkJYnJlYWs7CisJY2FzZSBQQzE6CisJCSplbmFibGVfYml0ID0gUENJX1BDMV9FTkFCTEVfQklUOworCQkqcGNpX29mZnNldCA9IFBDSV9QQzFfT0ZGU0VUOworCQlicmVhazsKKwljYXNlIFBDNjoKKwkJKmVuYWJsZV9iaXQgPSBQQ0lfUEM2X0VOQUJMRV9CSVQ7CisJCSpwY2lfb2Zmc2V0ID0gUENJX1BDNl9PRkZTRVQ7CisJCWJyZWFrOworCWNhc2UgTkJQMToKKwkJKmVuYWJsZV9iaXQgPSBQQ0lfTkJQMV9FTlRFUkVEX0JJVDsKKwkJKnBjaV9vZmZzZXQgPSBQQ0lfTkJQMV9TVEFUX09GRlNFVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW1kX2ZhbTE0aF9pbml0KGNzdGF0ZV90ICpzdGF0ZSwgdW5zaWduZWQgaW50IGNwdSkKK3sKKwlpbnQgZW5hYmxlX2JpdCwgcGNpX29mZnNldCwgcmV0OworCXVpbnQzMl90IHZhbDsKKworCXJldCA9IGFtZF9mYW0xNGhfZ2V0X3BjaV9pbmZvKHN0YXRlLCAmcGNpX29mZnNldCwgJmVuYWJsZV9iaXQsIGNwdSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIE5CUDEgbmVlZHMgZXh0cmEgdHJlYXRpbmcgLT4gd3JpdGUgMSB0byBEMThGNng5OCBiaXQgMSBmb3IgaW5pdCAqLworCWlmIChzdGF0ZS0+aWQgPT0gTkJQMSkgeworCQl2YWwgPSBwY2lfcmVhZF9sb25nKGFtZF9mYW0xNGhfcGNpX2RldiwgcGNpX29mZnNldCk7CisJCXZhbCB8PSAxIDw8IGVuYWJsZV9iaXQ7CisJCXZhbCA9IHBjaV93cml0ZV9sb25nKGFtZF9mYW0xNGhfcGNpX2RldiwgcGNpX29mZnNldCwgdmFsKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBFbmFibGUgbW9uaXRvciAqLworCXZhbCA9IHBjaV9yZWFkX2xvbmcoYW1kX2ZhbTE0aF9wY2lfZGV2LCBQQ0lfTU9OSVRPUl9FTkFCTEVfUkVHKTsKKwlkcHJpbnQoIkluaXQgJXM6IHJlYWQgYXQgb2Zmc2V0OiAweCV4IHZhbDogJXVcbiIsIHN0YXRlLT5uYW1lLAorCSAgICAgICBQQ0lfTU9OSVRPUl9FTkFCTEVfUkVHLCAodW5zaWduZWQgaW50KSB2YWwpOworCXZhbCB8PSAxIDw8IGVuYWJsZV9iaXQ7CisJcGNpX3dyaXRlX2xvbmcoYW1kX2ZhbTE0aF9wY2lfZGV2LCBQQ0lfTU9OSVRPUl9FTkFCTEVfUkVHLCB2YWwpOworCisJZHByaW50KCJJbml0ICVzOiBvZmZzZXQ6IDB4JXggZW5hYmxlX2JpdDogJWQgLSB2YWw6ICV1ICgldSlcbiIsCisJICAgICAgIHN0YXRlLT5uYW1lLCBQQ0lfTU9OSVRPUl9FTkFCTEVfUkVHLCBlbmFibGVfYml0LAorCSAgICAgICAodW5zaWduZWQgaW50KSB2YWwsIGNwdSk7CisKKwkvKiBTZXQgY291bnRlciB0byB6ZXJvICovCisJcGNpX3dyaXRlX2xvbmcoYW1kX2ZhbTE0aF9wY2lfZGV2LCBwY2lfb2Zmc2V0LCAwKTsKKwlwcmV2aW91c19jb3VudFtzdGF0ZS0+aWRdW2NwdV0gPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW1kX2ZhbTE0aF9kaXNhYmxlKGNzdGF0ZV90ICpzdGF0ZSwgdW5zaWduZWQgaW50IGNwdSkKK3sKKwlpbnQgZW5hYmxlX2JpdCwgcGNpX29mZnNldCwgcmV0OworCXVpbnQzMl90IHZhbDsKKworCXJldCA9IGFtZF9mYW0xNGhfZ2V0X3BjaV9pbmZvKHN0YXRlLCAmcGNpX29mZnNldCwgJmVuYWJsZV9iaXQsIGNwdSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZhbCA9IHBjaV9yZWFkX2xvbmcoYW1kX2ZhbTE0aF9wY2lfZGV2LCBwY2lfb2Zmc2V0KTsKKwlkcHJpbnQoIiVzOiBvZmZzZXQ6IDB4JXggJXVcbiIsIHN0YXRlLT5uYW1lLCBwY2lfb2Zmc2V0LCB2YWwpOworCWlmIChzdGF0ZS0+aWQgPT0gTkJQMSkgeworCQkvKiB3YXMgdGhlIGJpdCB3aGV0aGVyIE5CUDEgZ290IGVudGVyZWQgc2V0PyAqLworCQluYnAxX2VudGVyZWQgPSAodmFsICYgKDEgPDwgUENJX05CUDFfQUNUSVZFX0JJVCkpIHwKKwkJCSh2YWwgJiAoMSA8PCBQQ0lfTkJQMV9FTlRFUkVEX0JJVCkpOworCQkJCisJCWRwcmludCgiTkJQMSB3YXMgJXNlbnRlcmVkIC0gMHgleCAtIGVuYWJsZV9iaXQ6ICIKKwkJICAgICAgICIlZCAtIHBjaV9vZmZzZXQ6IDB4JXhcbiIsCisJCSAgICAgICBuYnAxX2VudGVyZWQgPyAiIiA6ICJub3QgIiwKKwkJICAgICAgIHZhbCwgZW5hYmxlX2JpdCwgcGNpX29mZnNldCk7CisJCXJldHVybiByZXQ7CisJfQorCWN1cnJlbnRfY291bnRbc3RhdGUtPmlkXVtjcHVdID0gdmFsOworCisJZHByaW50KCIlczogQ3VycmVudCAtICAlbGx1ICgldSlcbiIsIHN0YXRlLT5uYW1lLAorCSAgICAgICBjdXJyZW50X2NvdW50W3N0YXRlLT5pZF1bY3B1XSwgY3B1KTsKKwlkcHJpbnQoIiVzOiBQcmV2aW91cyAtICVsbHUgKCV1KVxuIiwgc3RhdGUtPm5hbWUsCisJICAgICAgIHByZXZpb3VzX2NvdW50W3N0YXRlLT5pZF1bY3B1XSwgY3B1KTsKKworCXZhbCA9IHBjaV9yZWFkX2xvbmcoYW1kX2ZhbTE0aF9wY2lfZGV2LCBQQ0lfTU9OSVRPUl9FTkFCTEVfUkVHKTsKKwl2YWwgJj0gfigxIDw8IGVuYWJsZV9iaXQpOworCXBjaV93cml0ZV9sb25nKGFtZF9mYW0xNGhfcGNpX2RldiwgUENJX01PTklUT1JfRU5BQkxFX1JFRywgdmFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZhbTE0aF9uYnAxX2NvdW50KHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgbG9uZyBsb25nICpjb3VudCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGNwdSkKK3sKKwlpZiAoaWQgPT0gTkJQMSkgeworCQlpZiAobmJwMV9lbnRlcmVkKQorCQkJKmNvdW50ID0gMTsKKwkJZWxzZQorCQkJKmNvdW50ID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KK3N0YXRpYyBpbnQgZmFtMTRoX2dldF9jb3VudF9wZXJjZW50KHVuc2lnbmVkIGludCBpZCwgZG91YmxlICpwZXJjZW50LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgZGlmZjsKKwkKKwlpZiAoaWQgPj0gQU1EX0ZBTTE0SF9TVEFURV9OVU0pCisJCXJldHVybiAtMTsKKwkvKiByZXNpZGVuY3kgY291bnQgaW4gODBucyAtPiBkaXZpZGUgdGhyb3VnaCAxMi41IHRvIGdldCB1cyByZXNpZGVuY3kgKi8KKwlkaWZmID0gY3VycmVudF9jb3VudFtpZF1bY3B1XSAtIHByZXZpb3VzX2NvdW50W2lkXVtjcHVdOworCisJaWYgKHRpbWVkaWZmID09IDApCisJCSpwZXJjZW50ID0gMC4wOworCWVsc2UKKwkJKnBlcmNlbnQgPSAxMDAuMCAqIGRpZmYgLyB0aW1lZGlmZiAvIDEyLjU7CisKKwlkcHJpbnQoIlRpbWVkaWZmOiAlbGx1IC0gcmVzfjogJWx1IHVzIC0gcGVyY2VudDogJS4yZiAlJVxuIiwKKwkgICAgICAgdGltZWRpZmYsIGRpZmYgKiAxMCAvIDEyNSwgKnBlcmNlbnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW1kX2ZhbTE0aF9zdGFydCh2b2lkKQoreworCWludCBudW0sIGNwdTsKKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmc3RhcnRfdGltZSk7CisJZm9yIChudW0gPSAwOyBudW0gPCBBTURfRkFNMTRIX1NUQVRFX05VTTsgbnVtKyspIHsKKwkJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKSB7CisJCQlhbWRfZmFtMTRoX2luaXQoJmFtZF9mYW0xNGhfY3N0YXRlc1tudW1dLCBjcHUpOworCQl9CisJfQorI2lmZGVmIERFQlVHCisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJmRiZ190aW1lKTsKKwlkYmdfdGltZWRpZmYgPSB0aW1lc3BlY19kaWZmX3VzKHN0YXJ0X3RpbWUsIGRiZ190aW1lKTsKKwlkcHJpbnQoIkVuYWJsaW5nIGNvdW50ZXJzIHRvb2s6ICVsdSB1c1xuIiwKKwkgICAgICAgZGJnX3RpbWVkaWZmKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFtZF9mYW0xNGhfc3RvcCh2b2lkKQoreworCWludCBudW0sIGNwdTsKKwlzdHJ1Y3QgdGltZXNwZWMgZW5kX3RpbWU7CisKKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmZW5kX3RpbWUpOworCisJZm9yIChudW0gPSAwOyBudW0gPCBBTURfRkFNMTRIX1NUQVRFX05VTTsgbnVtKyspIHsKKwkJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKSB7CisJCQlhbWRfZmFtMTRoX2Rpc2FibGUoJmFtZF9mYW0xNGhfY3N0YXRlc1tudW1dLCBjcHUpOworCQl9CisJfQorI2lmZGVmIERFQlVHCisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJmRiZ190aW1lKTsKKwlkYmdfdGltZWRpZmYgPSB0aW1lc3BlY19kaWZmX3VzKGVuZF90aW1lLCBkYmdfdGltZSk7CisJZHByaW50KCJEaXNhYmxpbmcgY291bnRlcnMgdG9vazogJWx1IG5zXG4iLCBkYmdfdGltZWRpZmYpOworI2VuZGlmCisJdGltZWRpZmYgPSB0aW1lc3BlY19kaWZmX3VzKHN0YXJ0X3RpbWUsIGVuZF90aW1lKTsKKwlpZiAodGltZWRpZmYgLyAxMDAwID4gT1ZFUkZMT1dfTVMpCisJCXByaW50X292ZXJmbG93X2VycigodW5zaWduZWQgaW50KXRpbWVkaWZmIC8gMTAwMDAwMCwKKwkJCQkgICBPVkVSRkxPV19NUyAvIDEwMDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfbmJwMV9jYXBhYmxlKHZvaWQpCit7CisJdWludDMyX3QgdmFsOworCXZhbCA9IHBjaV9yZWFkX2xvbmcoYW1kX2ZhbTE0aF9wY2lfZGV2LCBQQ0lfTkJQMV9DQVBfT0ZGU0VUKTsKKwlyZXR1cm4gdmFsICYgKDEgPDwgMzEpOworfQorCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yKiBhbWRfZmFtMTRoX3JlZ2lzdGVyKHZvaWQpIHsKKworCWludCBudW07CisKKwlpZiAoY3B1cG93ZXJfY3B1X2luZm8udmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChjcHVwb3dlcl9jcHVfaW5mby5mYW1pbHkgPT0gMHgxNCkgeworCQlpZiAoY3B1X2NvdW50IDw9IDAgfHwgY3B1X2NvdW50ID4gMikgeworCQkJZnByaW50ZihzdGRlcnIsICJBTUQgZmFtMTRoOiBJbnZhbGlkIGNwdSBjb3VudDogJWRcbiIsCisJCQkJY3B1X2NvdW50KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfSBlbHNlCisJCXJldHVybiBOVUxMOworCisJLyogV2UgZG8gbm90IGFsbG9jIGZvciBuYnAxIG1hY2hpbmUgd2lkZSBjb3VudGVyICovCisJZm9yIChudW0gPSAwOyBudW0gPCBBTURfRkFNMTRIX1NUQVRFX05VTSAtIDE7IG51bSsrKSB7CisJCXByZXZpb3VzX2NvdW50W251bV0gPSBjYWxsb2MgKGNwdV9jb3VudCwKKwkJCQkJICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykpOworCQljdXJyZW50X2NvdW50W251bV0gID0gY2FsbG9jIChjcHVfY291bnQsCisJCQkJCSAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKKwl9CisKKwlhbWRfZmFtMTRoX3BjaV9kZXYgPSBwY2lfYWNjX2luaXQoJnBjaV9hY2MsIHBjaV92ZW5kb3JfaWQsIHBjaV9kZXZfaWRzKTsKKwlpZiAoYW1kX2ZhbTE0aF9wY2lfZGV2ID09IE5VTEwgfHwgcGNpX2FjYyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghaXNfbmJwMV9jYXBhYmxlKCkpCisJCWFtZF9mYW0xNGhfbW9uaXRvci5od19zdGF0ZXNfbnVtID0gQU1EX0ZBTTE0SF9TVEFURV9OVU0gLSAxOworCisJYW1kX2ZhbTE0aF9tb25pdG9yLm5hbWVfbGVuID0gc3RybGVuKGFtZF9mYW0xNGhfbW9uaXRvci5uYW1lKTsKKwlyZXR1cm4gJmFtZF9mYW0xNGhfbW9uaXRvcjsKK30KKworc3RhdGljIHZvaWQgYW1kX2ZhbTE0aF91bnJlZ2lzdGVyKHZvaWQpCit7CisJaW50IG51bTsKKwlmb3IgKG51bSA9IDA7IG51bSA8IEFNRF9GQU0xNEhfU1RBVEVfTlVNIC0gMTsgbnVtKyspIHsKKwkJZnJlZShwcmV2aW91c19jb3VudFtudW1dKTsKKwkJZnJlZShjdXJyZW50X2NvdW50W251bV0pOworCX0KKwlwY2lfY2xlYW51cChwY2lfYWNjKTsKK30KKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciBhbWRfZmFtMTRoX21vbml0b3IgPSB7CisJLm5hbWUJCQk9ICJPbnRhcmlvIiwKKwkuaHdfc3RhdGVzCQk9IGFtZF9mYW0xNGhfY3N0YXRlcywKKwkuaHdfc3RhdGVzX251bQkJPSBBTURfRkFNMTRIX1NUQVRFX05VTSwKKwkuc3RhcnQJCQk9IGFtZF9mYW0xNGhfc3RhcnQsCisJLnN0b3AJCQk9IGFtZF9mYW0xNGhfc3RvcCwKKwkuZG9fcmVnaXN0ZXIJCT0gYW1kX2ZhbTE0aF9yZWdpc3RlciwKKwkudW5yZWdpc3RlcgkJPSBhbWRfZmFtMTRoX3VucmVnaXN0ZXIsCisJLm5lZWRzX3Jvb3QJCT0gMSwKKwkub3ZlcmZsb3dfcwkJPSBPVkVSRkxPV19NUyAvIDEwMDAsCit9OworI2VuZGlmIC8qICNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pICovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1aWRsZV9zeXNmcy5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2NwdWlkbGVfc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Y2ZDY3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2NwdWlkbGVfc3lzZnMuYwpAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL3N5c2ZzLmgiCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisjaW5jbHVkZSAiaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuaCIKKworI2RlZmluZSBDUFVJRExFX1NUQVRFU19NQVggMTAKK3N0YXRpYyBjc3RhdGVfdCBjcHVpZGxlX2NzdGF0ZXNbQ1BVSURMRV9TVEFURVNfTUFYXTsKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgY3B1aWRsZV9zeXNmc19tb25pdG9yOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICoqcHJldmlvdXNfY291bnQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICoqY3VycmVudF9jb3VudDsKK3N0cnVjdCB0aW1lc3BlYyBzdGFydF90aW1lOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lZGlmZjsKKworc3RhdGljIGludCBjcHVpZGxlX2dldF9jb3VudF9wZXJjZW50KHVuc2lnbmVkIGludCBpZCwgZG91YmxlICpwZXJjZW50LAorCQkJCSAgICAgdW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgc3RhdGVkaWZmID0gY3VycmVudF9jb3VudFtjcHVdW2lkXQorCQktIHByZXZpb3VzX2NvdW50W2NwdV1baWRdOworCWRwcmludCgiJXM6IC0gZGlmZjogJWxsdSAtIHBlcmNlbnQ6ICVmICgldSlcbiIsCisJICAgICAgIGNwdWlkbGVfY3N0YXRlc1tpZF0ubmFtZSwgdGltZWRpZmYsICpwZXJjZW50LCBjcHUpOworCisJaWYgKHRpbWVkaWZmID09IDApCisJCSpwZXJjZW50ID0gMC4wOworCWVsc2UKKwkJKnBlcmNlbnQgPSAoKDEwMC4wICogc3RhdGVkaWZmKSAvIHRpbWVkaWZmKTsKKwkKKwlkcHJpbnQoIiVzOiAtIHRpbWVkaWZmOiAlbGx1IC0gc3RhdGVkaWZmOiAlbGx1IC0gcGVyY2VudDogJWYgKCV1KVxuIiwKKwkgICAgICAgY3B1aWRsZV9jc3RhdGVzW2lkXS5uYW1lLCB0aW1lZGlmZiwgc3RhdGVkaWZmLCAqcGVyY2VudCwgY3B1KTsKKwkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcHVpZGxlX3N0YXJ0KHZvaWQpCit7CisJaW50IGNwdSwgc3RhdGU7CisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnN0YXJ0X3RpbWUpOworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2NvdW50OyBjcHUrKykgeworCQlmb3IgKHN0YXRlID0gMDsgc3RhdGUgPCBjcHVpZGxlX3N5c2ZzX21vbml0b3IuaHdfc3RhdGVzX251bTsKKwkJICAgICBzdGF0ZSsrKSB7CisJCQlwcmV2aW91c19jb3VudFtjcHVdW3N0YXRlXSA9CisJCQkJc3lzZnNfZ2V0X2lkbGVzdGF0ZV90aW1lKGNwdSwgc3RhdGUpOworCQkJZHByaW50KCJDUFUgJWQgLSBTdGF0ZTogJWQgLSBWYWw6ICVsbHVcbiIsCisJCQkgICAgICAgY3B1LCBzdGF0ZSwgcHJldmlvdXNfY291bnRbY3B1XVtzdGF0ZV0pOworCQl9CisJCQorCX07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3B1aWRsZV9zdG9wKHZvaWQpCit7CisJaW50IGNwdSwgc3RhdGU7CisJc3RydWN0IHRpbWVzcGVjIGVuZF90aW1lOworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZlbmRfdGltZSk7CisJdGltZWRpZmYgPSB0aW1lc3BlY19kaWZmX3VzKHN0YXJ0X3RpbWUsIGVuZF90aW1lKTsKKworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2NvdW50OyBjcHUrKykgeworCQlmb3IgKHN0YXRlID0gMDsgc3RhdGUgPCBjcHVpZGxlX3N5c2ZzX21vbml0b3IuaHdfc3RhdGVzX251bTsKKwkJICAgICBzdGF0ZSsrKSB7CisJCQljdXJyZW50X2NvdW50W2NwdV1bc3RhdGVdID0KKwkJCQlzeXNmc19nZXRfaWRsZXN0YXRlX3RpbWUoY3B1LCBzdGF0ZSk7CisJCQlkcHJpbnQoIkNQVSAlZCAtIFN0YXRlOiAlZCAtIFZhbDogJWxsdVxuIiwKKwkJCSAgICAgICBjcHUsIHN0YXRlLCBwcmV2aW91c19jb3VudFtjcHVdW3N0YXRlXSk7CisJCX0KKwl9OworCXJldHVybiAwOworfQorCit2b2lkIGZpeF91cF9pbnRlbF9pZGxlX2RyaXZlcl9uYW1lKGNoYXIgKnRtcCwgaW50IG51bSkKK3sKKwkvKiBmaXggdXAgY3B1aWRsZSBuYW1lIGZvciBpbnRlbCBpZGxlIGRyaXZlciAqLworCWlmICghc3RybmNtcCh0bXAsICJOSE0tIiwgNCkpIHsKKwkJc3dpdGNoKG51bSkgeworCQljYXNlIDE6IHN0cmNweSh0bXAsICJDMSIpOworCQkJYnJlYWs7CisJCWNhc2UgMjogc3RyY3B5KHRtcCwgIkMzIik7CisJCQlicmVhazsKKwkJY2FzZSAzOiBzdHJjcHkodG1wLCAiQzYiKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIGlmICghc3RybmNtcCh0bXAsICJTTkItIiwgNCkpIHsKKwkJc3dpdGNoKG51bSkgeworCQljYXNlIDE6IHN0cmNweSh0bXAsICJDMSIpOworCQkJYnJlYWs7CisJCWNhc2UgMjogc3RyY3B5KHRtcCwgIkMzIik7CisJCQlicmVhazsKKwkJY2FzZSAzOiBzdHJjcHkodG1wLCAiQzYiKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6IHN0cmNweSh0bXAsICJDNyIpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJuY21wKHRtcCwgIkFUTS0iLCA0KSkgeworCQlzd2l0Y2gobnVtKSB7CisJCWNhc2UgMTogc3RyY3B5KHRtcCwgIkMxIik7CisJCQlicmVhazsKKwkJY2FzZSAyOiBzdHJjcHkodG1wLCAiQzIiKTsKKwkJCWJyZWFrOworCQljYXNlIDM6IHN0cmNweSh0bXAsICJDNCIpOworCQkJYnJlYWs7CisJCWNhc2UgNDogc3RyY3B5KHRtcCwgIkM2Iik7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCBjcHVpZGxlX21vbml0b3IqIGNwdWlkbGVfcmVnaXN0ZXIodm9pZCkKK3sKKwlpbnQgbnVtOworCWNoYXIgKnRtcDsKKworCS8qIEFzc3VtZSBpZGxlIHN0YXRlIGNvdW50IGlzIHRoZSBzYW1lIGZvciBhbGwgQ1BVcyAqLworCWNwdWlkbGVfc3lzZnNfbW9uaXRvci5od19zdGF0ZXNfbnVtID0gc3lzZnNfZ2V0X2lkbGVzdGF0ZV9jb3VudCgwKTsKKworCWlmIChjcHVpZGxlX3N5c2ZzX21vbml0b3IuaHdfc3RhdGVzX251bSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAobnVtID0gMDsgbnVtIDwgY3B1aWRsZV9zeXNmc19tb25pdG9yLmh3X3N0YXRlc19udW07IG51bSArKykgeworCQl0bXAgPSBzeXNmc19nZXRfaWRsZXN0YXRlX25hbWUoMCwgbnVtKTsKKwkJaWYgKHRtcCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJZml4X3VwX2ludGVsX2lkbGVfZHJpdmVyX25hbWUodG1wLCBudW0pOworCQlzdHJuY3B5KGNwdWlkbGVfY3N0YXRlc1tudW1dLm5hbWUsIHRtcCwgQ1NUQVRFX05BTUVfTEVOIC0gMSk7CisJCWZyZWUodG1wKTsKKworCQl0bXAgPSBzeXNmc19nZXRfaWRsZXN0YXRlX2Rlc2MoMCwgbnVtKTsKKwkJaWYgKHRtcCA9PSBOVUxMKQorCQkJY29udGludWU7CisJCXN0cm5jcHkoY3B1aWRsZV9jc3RhdGVzW251bV0uZGVzYywgdG1wLAlDU1RBVEVfREVTQ19MRU4gLSAxKTsKKwkJZnJlZSh0bXApOworCisJCWNwdWlkbGVfY3N0YXRlc1tudW1dLnJhbmdlID0gUkFOR0VfVEhSRUFEOworCQljcHVpZGxlX2NzdGF0ZXNbbnVtXS5pZCA9IG51bTsKKwkJY3B1aWRsZV9jc3RhdGVzW251bV0uZ2V0X2NvdW50X3BlcmNlbnQgPSBjcHVpZGxlX2dldF9jb3VudF9wZXJjZW50OworIAl9OworCisJLyogRnJlZSB0aGlzIGF0IHByb2dyYW0gdGVybWluYXRpb24gKi8KKwlwcmV2aW91c19jb3VudCA9IG1hbGxvYyhzaXplb2YgKGxvbmcgbG9uZyopICogY3B1X2NvdW50KTsKKwljdXJyZW50X2NvdW50ID0gbWFsbG9jKHNpemVvZiAobG9uZyBsb25nKikgKiBjcHVfY291bnQpOworCWZvciAobnVtID0gMDsgbnVtIDwgY3B1X2NvdW50OyBudW0rKykgeworCQlwcmV2aW91c19jb3VudFtudW1dID0gbWFsbG9jIChzaXplb2YobG9uZyBsb25nKSAqCisJCQkJCSAgICAgIGNwdWlkbGVfc3lzZnNfbW9uaXRvci5od19zdGF0ZXNfbnVtKTsKKwkJY3VycmVudF9jb3VudFtudW1dID0gbWFsbG9jIChzaXplb2YobG9uZyBsb25nKSAqCisJCQkJCSAgICAgY3B1aWRsZV9zeXNmc19tb25pdG9yLmh3X3N0YXRlc19udW0pOworCX0KKworCWNwdWlkbGVfc3lzZnNfbW9uaXRvci5uYW1lX2xlbiA9IHN0cmxlbihjcHVpZGxlX3N5c2ZzX21vbml0b3IubmFtZSk7CisJcmV0dXJuICZjcHVpZGxlX3N5c2ZzX21vbml0b3I7Cit9CisKK3ZvaWQgY3B1aWRsZV91bnJlZ2lzdGVyKHZvaWQpCit7CisJaW50IG51bTsKKworCWZvciAobnVtID0gMDsgbnVtIDwgY3B1X2NvdW50OyBudW0rKykgeworCQlmcmVlKHByZXZpb3VzX2NvdW50W251bV0pOworCQlmcmVlKGN1cnJlbnRfY291bnRbbnVtXSk7CisJfQorCWZyZWUocHJldmlvdXNfY291bnQpOworCWZyZWUoY3VycmVudF9jb3VudCk7Cit9CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgY3B1aWRsZV9zeXNmc19tb25pdG9yID0geworCS5uYW1lCQkJPSAiSWRsZV9TdGF0cyIsCisJLmh3X3N0YXRlcwkJPSBjcHVpZGxlX2NzdGF0ZXMsCisJLnN0YXJ0CQkJPSBjcHVpZGxlX3N0YXJ0LAorCS5zdG9wCQkJPSBjcHVpZGxlX3N0b3AsCisJLmRvX3JlZ2lzdGVyCQk9IGNwdWlkbGVfcmVnaXN0ZXIsCisJLnVucmVnaXN0ZXIJCT0gY3B1aWRsZV91bnJlZ2lzdGVyLAorCS5uZWVkc19yb290CQk9IDAsCisJLm92ZXJmbG93X3MJCT0gVUlOVF9NQVgsCit9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U5NmU3OQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmMKQEAgLTAsMCArMSw0NDYgQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqICBPdXRwdXQgZm9ybWF0IGluc3BpcmVkIGJ5IExlbiBCcm93bidzIDxsZW5iQGtlcm5lbC5vcmc+IHR1cmJvc3RhdCB0b29sLgorICoKKyAqLworCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgorCisjaW5jbHVkZSAiaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuaCIKKyNpbmNsdWRlICJpZGxlX21vbml0b3IvaWRsZV9tb25pdG9ycy5oIgorI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorCisvKiBEZWZpbmUgcG9pbnRlcnMgdG8gYWxsIG1vbml0b3JzLiAgKi8KKyNkZWZpbmUgREVGKHgpICYgeCAjIyBfbW9uaXRvciAsCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yICogYWxsX21vbml0b3JzW10gPSB7CisjaW5jbHVkZSAiaWRsZV9tb25pdG9ycy5kZWYiCiswCit9OworCitzdGF0aWMgc3RydWN0IGNwdWlkbGVfbW9uaXRvciAqbW9uaXRvcnNbTU9OSVRPUlNfTUFYXTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXZhaWxfbW9uaXRvcnM7CisKK3N0YXRpYyBjaGFyICpwcm9nbmFtZTsKKworZW51bSBvcGVyYXRpb25fbW9kZV9lIHsgbGlzdCA9IDEsIHNob3csIHNob3dfYWxsIH07CitzdGF0aWMgaW50IG1vZGU7CitzdGF0aWMgaW50IGludGVydmFsID0gMTsKK3N0YXRpYyBjaGFyICpzaG93X21vbml0b3JzX3BhcmFtOworc3RhdGljIHN0cnVjdCBjcHVwb3dlcl90b3BvbG9neSBjcHVfdG9wOworCisvKiBUb0RvOiBEb2N1bWVudCB0aGlzIGluIHRoZSBtYW5wYWdlICovCitzdGF0aWMgY2hhciByYW5nZV9hYmJyW1JBTkdFX01BWF0gPSB7ICdUJywgJ0MnLCAnUCcsICdNJywgfTsKKworbG9uZyBsb25nIHRpbWVzcGVjX2RpZmZfdXMoc3RydWN0IHRpbWVzcGVjIHN0YXJ0LCBzdHJ1Y3QgdGltZXNwZWMgZW5kKQoreworCXN0cnVjdCB0aW1lc3BlYyB0ZW1wOworCWlmICgoZW5kLnR2X25zZWMgLSBzdGFydC50dl9uc2VjKSA8IDApIHsKKwkJdGVtcC50dl9zZWMgPSBlbmQudHZfc2VjIC0gc3RhcnQudHZfc2VjIC0gMTsKKwkJdGVtcC50dl9uc2VjID0gMTAwMDAwMDAwMCArIGVuZC50dl9uc2VjIC0gc3RhcnQudHZfbnNlYzsKKwl9IGVsc2UgeworCQl0ZW1wLnR2X3NlYyA9IGVuZC50dl9zZWMgLSBzdGFydC50dl9zZWM7CisJCXRlbXAudHZfbnNlYyA9IGVuZC50dl9uc2VjIC0gc3RhcnQudHZfbnNlYzsKKwl9CisJcmV0dXJuICh0ZW1wLnR2X3NlYyAqIDEwMDAwMDApICsgKHRlbXAudHZfbnNlYyAvIDEwMDApOworfQorCit2b2lkIG1vbml0b3JfaGVscCh2b2lkKQoreworCXByaW50ZihfKCJjcHVwb3dlciBtb25pdG9yOiBbLW0gPG1vbjE+LFs8bW9uMj5dLC4uIF0gY29tbWFuZFxuIikpOworCXByaW50ZihfKCJjcHVwb3dlciBtb25pdG9yOiBbLW0gPG1vbjE+LFs8bW9uMj5dLC4uIF0gWyAtaSBpbnRlcnZhbF9zZWMgXVxuIikpOworCXByaW50ZihfKCJjcHVwb3dlciBtb25pdG9yOiAtbFxuIikpOworCXByaW50ZihfKCJcdCBjb21tYW5kOiBwYXNzIGFuIGFyYml0cmFyeSBjb21tYW5kIHRvIG1lYXN1cmUgc3BlY2lmaWMgd29ya2xvYWRcbiIpKTsKKwlwcmludGYoXygiXHQgLWk6IHRpbWUgaW50ZXJ2YWxsIHRvIG1lYXN1cmUgZm9yIGluIHNlY29uZHMgKGRlZmF1bHQgMSlcbiIpKTsKKwlwcmludGYoXygiXHQgLWw6IGxpc3QgYXZhaWxhYmxlIENQVSBzbGVlcCBtb25pdG9ycyAoZm9yIHVzZSB3aXRoIC1tKVxuIikpOworCXByaW50ZihfKCJcdCAtbTogc2hvdyBzcGVjaWZpYyBDUFUgc2xlZXAgbW9uaXRvcnMgb25seSAoaW4gc2FtZSBvcmRlcilcbiIpKTsKKwlwcmludGYoXygiXHQgLWg6IHByaW50IHRoaXMgaGVscFxuIikpOworCXByaW50ZigiXG4iKTsKKwlwcmludGYoXygib25seSBvbmUgb2Y6IC1sLCAtbSBhcmUgYWxsb3dlZFxuSWYgbm9uZSBvZiB0aGVtIGlzIHBhc3NlZCwiKSk7CisJcHJpbnRmKF8oIiBhbGwgc3VwcG9ydGVkIG1vbml0b3JzIGFyZSBzaG93blxuIikpOworfQorCit2b2lkIHByaW50X25fc3BhY2VzKGludCBuKQoreworCWludCB4OworCWZvciAoeCA9IDA7IHggPCBuOyB4KyspCisJCXByaW50ZigiICIpOworfQkKKworLyogc2l6ZSBvZiBzIG11c3QgYmUgYXQgbGVhc3QgbiArIDEgKi8KK2ludCBmaWxsX3N0cmluZ193aXRoX3NwYWNlcyhjaGFyICpzLCBpbnQgbikKK3sKKyAgICAgICAgaW50IGxlbiA9IHN0cmxlbihzKTsKKwlpZiAobGVuID4gbikKKwkJcmV0dXJuIC0xOworICAgICAgICBmb3IgKDsgbGVuIDwgbjsgbGVuKyspCisgICAgICAgICAgICAgICAgc1tsZW5dID0gJyAnOworICAgICAgICBzW2xlbl0gPSAnXDAnOworCXJldHVybiAwOworfSAKKwordm9pZCBwcmludF9oZWFkZXIoaW50IHRvcG9sb2d5X2RlcHRoKQoreworCWludCB1bnNpZ25lZCBtb247CisJaW50IHN0YXRlLCBuZWVkX2xlbiwgcHJfbW9uX2xlbjsKKwljc3RhdGVfdCBzOworCWNoYXIgYnVmWzEyOF0gPSAiIjsKKwlpbnQgcGVyY2VudF93aWR0aCA9IDQ7CisKKwlmaWxsX3N0cmluZ193aXRoX3NwYWNlcyhidWYsIHRvcG9sb2d5X2RlcHRoICogNSAtIDEpOworCXByaW50ZigiJXN8IiwgYnVmKTsKKworCWZvciAobW9uID0gMDsgbW9uIDwgYXZhaWxfbW9uaXRvcnM7IG1vbisrKSB7CisJCXByX21vbl9sZW4gPSAwOworCQluZWVkX2xlbiA9IG1vbml0b3JzW21vbl0tPmh3X3N0YXRlc19udW0gKiAocGVyY2VudF93aWR0aCArIDMpCisJCQktIDE7CisJCWlmIChtb24gIT0gMCkgeworCQkJcHJpbnRmKCJ8fCAiKTsKKwkJCW5lZWRfbGVuIC0tOworCQl9CisJCXNwcmludGYoYnVmLCAiJXMiLCBtb25pdG9yc1ttb25dLT5uYW1lKTsKKwkJZmlsbF9zdHJpbmdfd2l0aF9zcGFjZXMoYnVmLCBuZWVkX2xlbik7CisJCXByaW50ZigiJXMiLCBidWYpOworCX0KKwlwcmludGYoIlxuIik7CisKKwlpZiAodG9wb2xvZ3lfZGVwdGggPiAyKQorCQlwcmludGYoIlBLRyB8Iik7CisJaWYgKHRvcG9sb2d5X2RlcHRoID4gMSkKKwkJcHJpbnRmKCJDT1JFfCIpOworCWlmICh0b3BvbG9neV9kZXB0aCA+IDApCisJCXByaW50ZigiQ1BVIHwiKTsKKworCWZvciAobW9uID0gMDsgbW9uIDwgYXZhaWxfbW9uaXRvcnM7IG1vbisrKSB7CisJCWlmIChtb24gIT0gMCkKKwkJCXByaW50ZigifHwgIik7CisJCWVsc2UKKwkJCXByaW50ZigiICIpOworCQlmb3IgKHN0YXRlID0gMDsgc3RhdGUgPCBtb25pdG9yc1ttb25dLT5od19zdGF0ZXNfbnVtOyBzdGF0ZSsrKSB7CisJCQlpZiAoc3RhdGUgIT0gMCkKKwkJCQlwcmludGYoIiB8ICIpOworCQkJcyA9IG1vbml0b3JzW21vbl0tPmh3X3N0YXRlc1tzdGF0ZV07CisJCQlzcHJpbnRmKGJ1ZiwgIiVzIiwgcy5uYW1lKTsKKwkJCWZpbGxfc3RyaW5nX3dpdGhfc3BhY2VzKGJ1ZiwgcGVyY2VudF93aWR0aCk7CisJCQlwcmludGYoIiVzIiwgYnVmKTsKKwkJfQorCQlwcmludGYoIiAiKTsKKwl9CisJcHJpbnRmKCJcbiIpOworfQorCisKK3ZvaWQgcHJpbnRfcmVzdWx0cyhpbnQgdG9wb2xvZ3lfZGVwdGgsIGludCBjcHUpCit7CisJdW5zaWduZWQgaW50IG1vbjsKKwlpbnQgc3RhdGUsIHJldDsKKwlkb3VibGUgcGVyY2VudDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcmVzdWx0OworCWNzdGF0ZV90IHM7CisKKwlpZiAodG9wb2xvZ3lfZGVwdGggPiAyKQorCQlwcmludGYoIiU0ZHwiLCBjcHVfdG9wLmNvcmVfaW5mb1tjcHVdLnBrZyk7CisJaWYgKHRvcG9sb2d5X2RlcHRoID4gMSkKKwkJcHJpbnRmKCIlNGR8IiwgY3B1X3RvcC5jb3JlX2luZm9bY3B1XS5jb3JlKTsKKwlpZiAodG9wb2xvZ3lfZGVwdGggPiAwKQorCQlwcmludGYoIiU0ZHwiLCBjcHVfdG9wLmNvcmVfaW5mb1tjcHVdLmNwdSk7CisKKwlmb3IgKG1vbiA9IDA7IG1vbiA8IGF2YWlsX21vbml0b3JzOyBtb24rKykgeworCQlpZiAobW9uICE9IDApCisJCQlwcmludGYoInx8Iik7CisKKwkJZm9yIChzdGF0ZSA9IDA7IHN0YXRlIDwgbW9uaXRvcnNbbW9uXS0+aHdfc3RhdGVzX251bTsgc3RhdGUrKykgeworCQkJaWYgKHN0YXRlICE9IDApCisJCQkJcHJpbnRmKCJ8Iik7CisKKwkJCXMgPSBtb25pdG9yc1ttb25dLT5od19zdGF0ZXNbc3RhdGVdOworCisJCQlpZiAocy5nZXRfY291bnRfcGVyY2VudCkgeworCQkJCXJldCA9IHMuZ2V0X2NvdW50X3BlcmNlbnQocy5pZCwgJnBlcmNlbnQsCisJCQkJCQkgIGNwdV90b3AuY29yZV9pbmZvW2NwdV0uY3B1KTsKKwkJCQlpZiAocmV0KSB7CisJCQkJCXByaW50ZigiKioqKioqIik7CisJCQkJfSBlbHNlIGlmIChwZXJjZW50ID49IDEwMC4wKQorCQkJCQlwcmludGYoIiU2LjFmIiwgcGVyY2VudCk7CisJCQkJZWxzZQorCQkJCQlwcmludGYoIiU2LjJmIiwgcGVyY2VudCk7CisJCQl9CisJCQllbHNlIGlmIChzLmdldF9jb3VudCkgeworCQkJCXJldCA9IHMuZ2V0X2NvdW50KHMuaWQsICZyZXN1bHQsCisJCQkJCQkgIGNwdV90b3AuY29yZV9pbmZvW2NwdV0uY3B1KTsKKwkJCQlpZiAocmV0KSB7CisJCQkJCXByaW50ZigiKioqKioqIik7CisJCQkJfSBlbHNlCisJCQkJCXByaW50ZigiJTZsbHUiLCByZXN1bHQpOworCQkJfQorCQkJZWxzZSB7CisJCQkJcHJpbnRmKF8oIk1vbml0b3IgJXMsIENvdW50ZXIgJXMgaGFzIG5vIGNvdW50ICIKKwkJCQkJICJmdW5jdGlvbi4gSW1wbGVtZW50YXRpb24gZXJyb3JcbiIpLAorCQkJCSAgICAgICBtb25pdG9yc1ttb25dLT5uYW1lLCBzLm5hbWUpOworCQkJCWV4aXQgKEVYSVRfRkFJTFVSRSk7CisJCQl9CisJCX0KKwl9CisJLyogY3B1IG9mZmxpbmUgKi8KKwlpZiAoY3B1X3RvcC5jb3JlX2luZm9bY3B1XS5wa2cgPT0gLTEgfHwKKwkgICAgY3B1X3RvcC5jb3JlX2luZm9bY3B1XS5jb3JlID09IC0xKSB7CisJCXByaW50ZihfKCIgKmlzIG9mZmxpbmVcbiIpKTsKKwkJcmV0dXJuOworCX0gZWxzZQorCQlwcmludGYoIlxuIik7Cit9CisKKworLyogcGFyYW06IHN0cmluZyBwYXNzZWQgYnkgLW0gcGFyYW0gKFRoZSBsaXN0IG9mIG1vbml0b3JzIHRvIHNob3cpCisgKgorICogTW9uaXRvcnMgbXVzdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBhbHJlYWR5LCBtYXRjaGluZyBtb25pdG9ycworICogYXJlIHBpY2tlZCBvdXQgYW5kIGF2YWlsYWJsZSBtb25pdG9ycyBhcnJheSBpcyBvdmVycmlkZGVuCisgKiB3aXRoIG1hdGNoaW5nIG9uZXMKKyAqCisgKiBNb25pdG9ycyBnZXQgc29ydGVkIGluIHRoZSBzYW1lIG9yZGVyIHRoZSB1c2VyIHBhc3NlcyB0aGVtCisqLworCitzdGF0aWMgdm9pZCBwYXJzZV9tb25pdG9yX3BhcmFtKGNoYXIqIHBhcmFtKQoreworCXVuc2lnbmVkIGludCBudW07CisJaW50IG1vbiwgaGl0cyA9IDA7CisJY2hhciAqdG1wID0gcGFyYW0sICp0b2tlbjsKKwlzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yICp0bXBfbW9uc1tNT05JVE9SU19NQVhdOworCisKKwlmb3IgKG1vbiA9IDA7IG1vbiA8IE1PTklUT1JTX01BWDttb24rKywgdG1wID0gTlVMTCkgeworCQl0b2tlbiA9IHN0cnRvayh0bXAsICIsIik7CisJCWlmICh0b2tlbiA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWlmIChzdHJsZW4odG9rZW4pID49IE1PTklUT1JfTkFNRV9MRU4pIHsKKwkJCXByaW50ZihfKCIlczogbWF4IG1vbml0b3IgbmFtZSBsZW5ndGgiCisJCQkJICIgKCVkKSBleGNlZWRlZFxuIiksIHRva2VuLCBNT05JVE9SX05BTUVfTEVOKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZm9yIChudW0gPSAwOyBudW0gPCBhdmFpbF9tb25pdG9yczsgbnVtKyspIHsKKwkJCWlmICghc3RyY21wKG1vbml0b3JzW251bV0tPm5hbWUsIHRva2VuKSkgeworCQkJCWRwcmludCgiRm91bmQgcmVxdWVzdGVkIG1vbml0b3I6ICVzXG4iLCB0b2tlbik7CisJCQkJdG1wX21vbnNbaGl0c10gPSBtb25pdG9yc1tudW1dOworCQkJCWhpdHMrKzsKKwkJCX0KKwkJfQkKKwl9CisJaWYgKGhpdHMgPT0gMCkgeworCQlwcmludGYoXygiTm8gbWF0Y2hpbmcgbW9uaXRvciBmb3VuZCBpbiAlcywgIgorCQkJICJ0cnkgLWwgb3B0aW9uXG4iKSwgcGFyYW0pOworCQltb25pdG9yX2hlbHAoKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwkvKiBPdmVycmlkZSBkZXRlY3RlZC9yZWdpc3RlcmQgbW9uaXRvcnMgYXJyYXkgd2l0aCByZXF1ZXN0ZWQgb25lICovCisJbWVtY3B5KG1vbml0b3JzLCB0bXBfbW9ucywgc2l6ZW9mKHN0cnVjdCBjcHVpZGxlX21vbml0b3IqKSAqIE1PTklUT1JTX01BWCk7CisJYXZhaWxfbW9uaXRvcnMgPSBoaXRzOworfQorCit2b2lkIGxpc3RfbW9uaXRvcnModm9pZCkgeworCXVuc2lnbmVkIGludCBtb247CisJaW50IHN0YXRlOworCWNzdGF0ZV90IHM7CisKKwlmb3IgKG1vbiA9IDA7IG1vbiA8IGF2YWlsX21vbml0b3JzOyBtb24rKykgeworCQlwcmludGYoXygiTW9uaXRvciBcIiVzXCIgKCVkIHN0YXRlcykgLSBNaWdodCBvdmVyZmxvdyBhZnRlciAldSAiCisJCQkgInNcbiIpLCBtb25pdG9yc1ttb25dLT5uYW1lLCBtb25pdG9yc1ttb25dLT5od19zdGF0ZXNfbnVtLAorCQkgICAgICAgbW9uaXRvcnNbbW9uXS0+b3ZlcmZsb3dfcyk7CisJCSAgICAgICAKKwkJZm9yIChzdGF0ZSA9IDA7IHN0YXRlIDwgbW9uaXRvcnNbbW9uXS0+aHdfc3RhdGVzX251bTsgc3RhdGUrKykgeworCQkJcyA9IG1vbml0b3JzW21vbl0tPmh3X3N0YXRlc1tzdGF0ZV07CisJCQkvKgorCQkJICogVG9EbyBzaG93IG1vcmUgc3RhdGUgY2FwYWJpbGl0aWVzOgorCQkJICogcGVyY2VudCwgdGltZSAoZ3Jhbmxhcml0eSkKKwkJCSAqLworCQkJcHJpbnRmKCIlc1x0WyVjXSAtPiAlc1xuIiwgcy5uYW1lLCByYW5nZV9hYmJyW3MucmFuZ2VdLAorCQkJICAgICAgIGdldHRleHQocy5kZXNjKSk7CisJCX0KKwl9Cit9CisKK2ludCBmb3JrX2l0KGNoYXIgKiphcmd2KQoreworCWludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IG51bTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdGltZWRpZmY7CisJcGlkX3QgY2hpbGRfcGlkOworCXN0cnVjdCB0aW1lc3BlYyBzdGFydCwgZW5kOworCisJY2hpbGRfcGlkID0gZm9yaygpOworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZzdGFydCk7CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IGF2YWlsX21vbml0b3JzOyBudW0rKykKKwkJbW9uaXRvcnNbbnVtXS0+c3RhcnQoKTsKKworCWlmICghY2hpbGRfcGlkKSB7CisJCS8qIGNoaWxkICovCisJCWV4ZWN2cChhcmd2WzBdLCBhcmd2KTsKKwl9IGVsc2UgeworCQkvKiBwYXJlbnQgKi8KKwkJaWYgKGNoaWxkX3BpZCA9PSAtMSkgeworCQkJcGVycm9yKCJmb3JrIik7CisJCQlleGl0KDEpOworCQl9CisKKwkJc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7CisJCXNpZ25hbChTSUdRVUlULCBTSUdfSUdOKTsKKwkJaWYgKHdhaXRwaWQoY2hpbGRfcGlkLCAmc3RhdHVzLCAwKSA9PSAtMSkgeworCQkJcGVycm9yKCJ3YWl0Iik7CisJCQlleGl0KDEpOworCQl9CisJfQorCWNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZlbmQpOworCWZvciAobnVtID0gMDsgbnVtIDwgYXZhaWxfbW9uaXRvcnM7IG51bSsrKQorCQltb25pdG9yc1tudW1dLT5zdG9wKCk7CisKKwl0aW1lZGlmZiA9IHRpbWVzcGVjX2RpZmZfdXMoc3RhcnQsIGVuZCk7CisJaWYgKFdJRkVYSVRFRChzdGF0dXMpKQorCQlwcmludGYoXygiJXMgdG9vayAlLjVmIHNlY29uZHMgYW5kIGV4aXRlZCB3aXRoIHN0YXR1cyAlZFxuIiksCisJCSAgICAgICBhcmd2WzBdLCB0aW1lZGlmZiAvICgxMDAwLjAgKiAxMDAwKSwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBkb19pbnRlcnZhbF9tZWFzdXJlKGludCBpKQoreworCXVuc2lnbmVkIGludCBudW07CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IGF2YWlsX21vbml0b3JzOyBudW0rKykgeworCQlkcHJpbnQoIkhXIEMtc3RhdGUgcmVzaWRlbmN5IG1vbml0b3I6ICVzIC0gU3RhdGVzOiAlZFxuIiwKKwkJICAgICAgIG1vbml0b3JzW251bV0tPm5hbWUsIG1vbml0b3JzW251bV0tPmh3X3N0YXRlc19udW0pOworCQltb25pdG9yc1tudW1dLT5zdGFydCgpOworCX0KKwlzbGVlcChpKTsKKwlmb3IgKG51bSA9IDA7IG51bSA8IGF2YWlsX21vbml0b3JzOyBudW0rKykgeworCQltb25pdG9yc1tudW1dLT5zdG9wKCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbWRsaW5lKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IG9wdDsKKwlwcm9nbmFtZSA9IGJhc2VuYW1lKGFyZ3ZbMF0pOworCisJd2hpbGUgKChvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgIitobGk6bToiKSkgIT0gLTEpIHsKKwkJc3dpdGNoIChvcHQpIHsKKwkJY2FzZSAnaCc6CisJCQltb25pdG9yX2hlbHAoKTsKKwkJCWV4aXQoRVhJVF9TVUNDRVNTKTsKKwkJY2FzZSAnbCc6CisJCQlpZiAobW9kZSkgeworCQkJCW1vbml0b3JfaGVscCgpOworCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJCX0KKwkJCW1vZGUgPSBsaXN0OworCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJLyogb25seSBhbGxvdyAtaSB3aXRoIC1tIG9yIG5vIG9wdGlvbiAqLworCQkJaWYgKG1vZGUgJiYgbW9kZSAhPSBzaG93KSB7CisJCQkJbW9uaXRvcl9oZWxwKCk7CisJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJfQorCQkJaW50ZXJ2YWwgPSBhdG9pKG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlpZiAobW9kZSkgeworCQkJCW1vbml0b3JfaGVscCgpOworCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJCX0KKwkJCW1vZGUgPSBzaG93OworCQkJc2hvd19tb25pdG9yc19wYXJhbSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbW9uaXRvcl9oZWxwKCk7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKwl9CisJaWYgKCFtb2RlKQorCQltb2RlID0gc2hvd19hbGw7Cit9CisKK2ludCBjbWRfbW9uaXRvcihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgaW50IG51bTsKKwlzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yICp0ZXN0X21vbjsKKwlpbnQgY3B1OworCisJY21kbGluZShhcmdjLCBhcmd2KTsKKwljcHVfY291bnQgPSBnZXRfY3B1X3RvcG9sb2d5KCZjcHVfdG9wKTsKKwlpZiAoY3B1X2NvdW50IDwgMCkgeworCQlwcmludGYoXygiQ2Fubm90IHJlYWQgbnVtYmVyIG9mIGF2YWlsYWJsZSBwcm9jZXNzb3JzXG4iKSk7CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCisJZHByaW50KCJTeXN0ZW0gaGFzIHVwIHRvICVkIENQVSBjb3Jlc1xuIiwgY3B1X2NvdW50KTsKKwkKKwlmb3IgKG51bSA9IDA7IGFsbF9tb25pdG9yc1tudW1dOyBudW0rKykgeworCQlkcHJpbnQoIlRyeSB0byByZWdpc3RlcjogJXNcbiIsIGFsbF9tb25pdG9yc1tudW1dLT5uYW1lKTsKKwkJdGVzdF9tb24gPSBhbGxfbW9uaXRvcnNbbnVtXS0+ZG9fcmVnaXN0ZXIoKTsKKwkJaWYgKHRlc3RfbW9uKSB7CisJCQlpZiAodGVzdF9tb24tPm5lZWRzX3Jvb3QgJiYgIXJ1bl9hc19yb290KSB7CisJCQkJZnByaW50ZihzdGRlcnIsIF8oIkF2YWlsYWJsZSBtb25pdG9yICVzIG5lZWRzICIKKwkJCQkJICAicm9vdCBhY2Nlc3NcbiIpLCB0ZXN0X21vbi0+bmFtZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQltb25pdG9yc1thdmFpbF9tb25pdG9yc10gPSB0ZXN0X21vbjsKKwkJCWRwcmludCgiJXMgcmVnaXN0ZXJlZFxuIiwgYWxsX21vbml0b3JzW251bV0tPm5hbWUpOworCQkJYXZhaWxfbW9uaXRvcnMrKzsKKwkJfQorCX0KKworCWlmIChhdmFpbF9tb25pdG9ycyA9PSAwKSB7CisJCXByaW50ZihfKCJObyBIVyBDc3RhdGUgbW9uaXRvcnMgZm91bmRcbiIpKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKG1vZGUgPT0gbGlzdCkgeworCQlsaXN0X21vbml0b3JzKCk7CisJCWV4aXQoRVhJVF9TVUNDRVNTKTsKKwl9CisKKwlpZiAobW9kZSA9PSBzaG93KQorCQlwYXJzZV9tb25pdG9yX3BhcmFtKHNob3dfbW9uaXRvcnNfcGFyYW0pOworCisJZHByaW50KCJQYWNrYWdlczogJWQgLSBDb3JlczogJWQgLSBDUFVzOiAlZFxuIiwKKwkgICAgICAgY3B1X3RvcC5wa2dzLCBjcHVfdG9wLmNvcmVzLCBjcHVfY291bnQpOworCisJLyoKKwkgKiBpZiBhbnkgcGFyYW1zIGxlZnQsIGl0IG11c3QgYmUgYSBjb21tYW5kIHRvIGZvcmsKKwkgKi8KKwlpZiAoYXJnYyAtIG9wdGluZCkKKwkJZm9ya19pdChhcmd2ICsgb3B0aW5kKTsKKwllbHNlCisJCWRvX2ludGVydmFsX21lYXN1cmUoaW50ZXJ2YWwpOworCisJLyogVG9EbzogVG9wb2xvZ3kgcGFyc2luZyBuZWVkcyBmaXhpbmcgZmlyc3QgdG8gZG8KKwkgICB0aGlzIG1vcmUgZ2VuZXJpY2FsbHkgKi8KKwlpZiAoY3B1X3RvcC5wa2dzID4gMSkKKwkJcHJpbnRfaGVhZGVyKDMpOworCWVsc2UKKwkJcHJpbnRfaGVhZGVyKDEpOworCisJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKSB7CisJCWlmIChjcHVfdG9wLnBrZ3MgPiAxKQorCQkJcHJpbnRfcmVzdWx0cygzLCBjcHUpOworCQllbHNlCisJCQlwcmludF9yZXN1bHRzKDEsIGNwdSk7CisJfQorCisJZm9yIChudW0gPSAwOyBudW0gPCBhdmFpbF9tb25pdG9yczsgbnVtKyspIHsKKwkJbW9uaXRvcnNbbnVtXS0+dW5yZWdpc3RlcigpOworCX0KKwljcHVfdG9wb2xvZ3lfcmVsZWFzZShjcHVfdG9wKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmggYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMTJlZTEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIF9fQ1BVSURMRV9JTkZPX0hXX18KKyNkZWZpbmUgX19DUFVJRExFX0lORk9fSFdfXworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSAiaWRsZV9tb25pdG9yL2lkbGVfbW9uaXRvcnMuaCIKKworI2RlZmluZSBNT05JVE9SU19NQVggMjAKKyNkZWZpbmUgTU9OSVRPUl9OQU1FX0xFTiAyMAorI2RlZmluZSBDU1RBVEVfTkFNRV9MRU4gNQorI2RlZmluZSBDU1RBVEVfREVTQ19MRU4gNjAKKworaW50IGNwdV9jb3VudDsKKworLyogSGFyZCB0byBkZWZpbmUgdGhlIHJpZ2h0IG5hbWVzIC4uLjogKi8KK2VudW0gcG93ZXJfcmFuZ2VfZSB7CisJUkFOR0VfVEhSRUFELAkvKiBMb3dlc3QgaW4gdG9wb2xvZ3kgaGllcmFyY3ksIEFNRDogY29yZSwgSW50ZWw6IHRocmVhZAorCQkJICAga2VybmVsIHN5c2ZzOiBjcHUgKi8KKwlSQU5HRV9DT1JFLAkvKiBBTUQ6IHVuaXQsIEludGVsOiBjb3JlLCBrZXJuZWxfc3lzZnM6IGNvcmVfaWQgKi8KKwlSQU5HRV9QQUNLQUdFLAkvKiBQYWNrYWdlLCBwcm9jZXNzb3Igc29ja2V0ICovCisJUkFOR0VfTUFDSElORSwJLyogTWFjaGluZSwgcGxhdGZvcm0gd2lkZSAqLworCVJBTkdFX01BWCB9OworCit0eXBlZGVmIHN0cnVjdCBjc3RhdGUgeworCWludCAgaWQ7CisJZW51bSBwb3dlcl9yYW5nZV9lIHJhbmdlOworCWNoYXIgbmFtZVtDU1RBVEVfTkFNRV9MRU5dOworCWNoYXIgZGVzY1tDU1RBVEVfREVTQ19MRU5dOworCisJLyogZWl0aGVyIHByb3ZpZGUgYSBwZXJjZW50YWdlIG9yIGEgZ2VuZXJhbCBjb3VudCAqLworCWludCAoKmdldF9jb3VudF9wZXJjZW50KSh1bnNpZ25lZCBpbnQgc2VsZl9pZCwgZG91YmxlICpwZXJjZW50LAorCQkJCSB1bnNpZ25lZCBpbnQgY3B1KTsKKwlpbnQgKCpnZXRfY291bnQpKHVuc2lnbmVkIGludCBzZWxmX2lkLCB1bnNpZ25lZCBsb25nIGxvbmcgKmNvdW50LAorCQkJIHVuc2lnbmVkIGludCBjcHUpOworfSBjc3RhdGVfdDsKKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciB7CisJLyogTmFtZSBtdXN0IG5vdCBjb250YWluIHdoaXRlc3BhY2VzICovCisJY2hhciBuYW1lW01PTklUT1JfTkFNRV9MRU5dOworCWludCBuYW1lX2xlbjsKKwlpbnQgaHdfc3RhdGVzX251bTsKKwljc3RhdGVfdCAqaHdfc3RhdGVzOworCWludCAoKnN0YXJ0KSAodm9pZCk7CisJaW50ICgqc3RvcCkgKHZvaWQpOworCXN0cnVjdCBjcHVpZGxlX21vbml0b3IqICgqZG9fcmVnaXN0ZXIpICh2b2lkKTsKKwl2b2lkICgqdW5yZWdpc3Rlcikodm9pZCk7CisJdW5zaWduZWQgaW50IG92ZXJmbG93X3M7CisJaW50IG5lZWRzX3Jvb3Q7Cit9OworCitleHRlcm4gbG9uZyBsb25nIHRpbWVzcGVjX2RpZmZfdXMoc3RydWN0IHRpbWVzcGVjIHN0YXJ0LCBzdHJ1Y3QgdGltZXNwZWMgZW5kKTsKKworI2RlZmluZSBwcmludF9vdmVyZmxvd19lcnIobWVzLCBvdikJCQkJCQlcCit7CQkJCQkJCQkJCVwKKwlmcHJpbnRmKHN0ZGVyciwgZ2V0dGV4dCgiTWVhc3VyZSB0b29rICV1IHNlY29uZHMsIGJ1dCByZWdpc3RlcnMgY291bGQgIglcCisJCQkJIm92ZXJmbG93IGF0ICV1IHNlY29uZHMsIHJlc3VsdHMgIgkJXAorCQkJCSJjb3VsZCBiZSBpbmFjY3VyYXRlXG4iKSwgbWVzLCBvdik7CQlcCit9CisKKyNlbmRpZiAvKiBfX0NQVUlETEVfSU5GT19IV19fICovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvaWRsZV9tb25pdG9ycy5kZWYgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvaWRsZV9tb25pdG9ycy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNmOGQ5YgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmRlZgpAQCAtMCwwICsxLDcgQEAKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCitERUYoYW1kX2ZhbTE0aCkKK0RFRihpbnRlbF9uaG0pCitERUYoaW50ZWxfc25iKQorREVGKG1wZXJmKQorI2VuZGlmCitERUYoY3B1aWRsZV9zeXNmcykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmggYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvaWRsZV9tb25pdG9ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmY2RlYjEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvaWRsZV9tb25pdG9ycy5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqICBCYXNlZCBvbiB0aGUgaWRlYSBmcm9tIE1pY2hhZWwgTWF0eiA8bWF0ekBzdXNlLmRlPgorICoKKyAqLworCisjaWZuZGVmIF9DUFVJRExFX0lETEVfTU9OSVRPUlNfSF8KKyNkZWZpbmUgX0NQVUlETEVfSURMRV9NT05JVE9SU19IXworCisjZGVmaW5lIERFRih4KSBleHRlcm4gc3RydWN0IGNwdWlkbGVfbW9uaXRvciB4ICMjX21vbml0b3I7CisjaW5jbHVkZSAiaWRsZV9tb25pdG9ycy5kZWYiCisjdW5kZWYgREVGCitleHRlcm4gc3RydWN0IGNwdWlkbGVfbW9uaXRvciAqYWxsX21vbml0b3JzW107CisKKyNlbmRpZiAvKiBfQ1BVSURMRV9JRExFX01PTklUT1JTX0hfICovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODU0NWU0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYwpAQCAtMCwwICsxLDI1OCBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlIDxjcHVmcmVxLmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJpZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5oIgorCisjZGVmaW5lIE1TUl9BUEVSRgkweEU4CisjZGVmaW5lIE1TUl9NUEVSRgkweEU3CisKKyNkZWZpbmUgTVNSX1RTQwkweDEwCisKK2VudW0gbXBlcmZfaWQgeyBDMCA9IDAsIEN4LCBBVkdfRlJFUSwgTVBFUkZfQ1NUQVRFX0NPVU5UIH07CisKK3N0YXRpYyBpbnQgbXBlcmZfZ2V0X2NvdW50X3BlcmNlbnQodW5zaWduZWQgaW50IHNlbGZfaWQsIGRvdWJsZSAqcGVyY2VudCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgY3B1KTsKK3N0YXRpYyBpbnQgbXBlcmZfZ2V0X2NvdW50X2ZyZXEodW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBsb25nIGxvbmcgKmNvdW50LAorCQkJCXVuc2lnbmVkIGludCBjcHUpOworCitzdGF0aWMgY3N0YXRlX3QgbXBlcmZfY3N0YXRlc1tNUEVSRl9DU1RBVEVfQ09VTlRdID0geworCXsKKwkJLm5hbWUJCQk9ICJDMCIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIENvcmUgbm90IGlkbGUiKSwKKwkJLmlkCQkJPSBDMCwKKwkJLnJhbmdlCQkJPSBSQU5HRV9USFJFQUQsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IG1wZXJmX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisJeworCQkubmFtZQkJCT0gIkN4IiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgQ29yZSBpbiBhbiBpZGxlIHN0YXRlIiksCisJCS5pZAkJCT0gQ3gsCisJCS5yYW5nZQkJCT0gUkFOR0VfVEhSRUFELAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBtcGVyZl9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorCisJeworCQkubmFtZQkJCT0gIkZyZXEiLAorCQkuZGVzYwkJCT0gTl8oIkF2ZXJhZ2UgRnJlcXVlbmN5IChpbmNsdWRpbmcgYm9vc3QpIGluIE1IeiIpLAorCQkuaWQJCQk9IEFWR19GUkVRLAorCQkucmFuZ2UJCQk9IFJBTkdFX1RIUkVBRCwKKwkJLmdldF9jb3VudAkJPSBtcGVyZl9nZXRfY291bnRfZnJlcSwKKwl9LAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyB0c2NfYXRfbWVhc3VyZV9zdGFydDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdHNjX2F0X21lYXN1cmVfZW5kOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X2ZyZXF1ZW5jeTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKm1wZXJmX3ByZXZpb3VzX2NvdW50Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqYXBlcmZfcHJldmlvdXNfY291bnQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICptcGVyZl9jdXJyZW50X2NvdW50Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqYXBlcmZfY3VycmVudF9jb3VudDsKKy8qIHZhbGlkIGZsYWcgZm9yIGFsbCBDUFVzLiBJZiBhIE1TUiByZWFkIGZhaWxlZCBpdCB3aWxsIGJlIHplcm8gKi8KK3N0YXRpYyBpbnQgKmlzX3ZhbGlkOworCitzdGF0aWMgaW50IG1wZXJmX2dldF90c2ModW5zaWduZWQgbG9uZyBsb25nICp0c2MpCit7CisJcmV0dXJuIHJlYWRfbXNyKDAsIE1TUl9UU0MsIHRzYyk7Cit9CisKK3N0YXRpYyBpbnQgbXBlcmZfaW5pdF9zdGF0cyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHJlYWRfbXNyKGNwdSwgTVNSX0FQRVJGLCAmdmFsKTsKKwlhcGVyZl9wcmV2aW91c19jb3VudFtjcHVdID0gdmFsOworCXJldCB8PSByZWFkX21zcihjcHUsIE1TUl9NUEVSRiwgJnZhbCk7CisJbXBlcmZfcHJldmlvdXNfY291bnRbY3B1XSA9IHZhbDsKKwlpc192YWxpZFtjcHVdID0gIXJldDsKKwkKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGVyZl9tZWFzdXJlX3N0YXRzKHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVhZF9tc3IoY3B1LCBNU1JfQVBFUkYsICZ2YWwpOworCWFwZXJmX2N1cnJlbnRfY291bnRbY3B1XSA9IHZhbDsKKwlyZXQgfD0gcmVhZF9tc3IoY3B1LCBNU1JfTVBFUkYsICZ2YWwpOworCW1wZXJmX2N1cnJlbnRfY291bnRbY3B1XSA9IHZhbDsKKwlpc192YWxpZFtjcHVdID0gIXJldDsKKwkKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGdldF9hdmVyYWdlX3BlcmYoKQorICoKKyAqIFJldHVybnMgdGhlIGF2ZXJhZ2UgcGVyZm9ybWFuY2UgKGFsc28gY29uc2lkZXJzIGJvb3N0ZWQgZnJlcXVlbmNpZXMpCisgKgorICogSW5wdXQ6CisgKiAgIGFwZXJmX2RpZmY6IERpZmZlcmVuY2Ugb2YgdGhlIGFwZXJmIHJlZ2lzdGVyIG92ZXIgYSB0aW1lIHBlcmlvZAorICogICBtcGVyZl9kaWZmOiBEaWZmZXJlbmNlIG9mIHRoZSBtcGVyZiByZWdpc3RlciBvdmVyIHRoZSBzYW1lIHRpbWUgcGVyaW9kCisgKiAgIG1heF9mcmVxOiAgIE1heGltdW0gZnJlcXVlbmN5IChQMCkKKyAqCisgKiBSZXR1cm5zOgorICogICBBdmVyYWdlIHBlcmZvcm1hbmNlIG92ZXIgdGhlIHRpbWUgcGVyaW9kCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9hdmVyYWdlX3BlcmYodW5zaWduZWQgbG9uZyBsb25nIGFwZXJmX2RpZmYsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG1wZXJmX2RpZmYpCit7CisJdW5zaWduZWQgaW50IHBlcmZfcGVyY2VudCA9IDA7CisJaWYgKCgodW5zaWduZWQgbG9uZykoLTEpIC8gMTAwKSA8IGFwZXJmX2RpZmYpIHsKKwkJaW50IHNoaWZ0X2NvdW50ID0gNzsKKwkJYXBlcmZfZGlmZiA+Pj0gc2hpZnRfY291bnQ7CisJCW1wZXJmX2RpZmYgPj49IHNoaWZ0X2NvdW50OworCX0KKwlwZXJmX3BlcmNlbnQgPSAoYXBlcmZfZGlmZiAqIDEwMCkgLyBtcGVyZl9kaWZmOworCXJldHVybiAobWF4X2ZyZXF1ZW5jeSAqIHBlcmZfcGVyY2VudCkgLyAxMDA7Cit9CisKK3N0YXRpYyBpbnQgbXBlcmZfZ2V0X2NvdW50X3BlcmNlbnQodW5zaWduZWQgaW50IGlkLCBkb3VibGUgKnBlcmNlbnQsCisJCQkJICAgdW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgYXBlcmZfZGlmZiwgbXBlcmZfZGlmZiwgdHNjX2RpZmY7CisKKwlpZiAoIWlzX3ZhbGlkW2NwdV0pCisJCXJldHVybiAtMTsKKworCWlmIChpZCAhPSBDMCAmJiBpZCAhPSBDeCkKKwkJcmV0dXJuIC0xOworCisJbXBlcmZfZGlmZiA9IG1wZXJmX2N1cnJlbnRfY291bnRbY3B1XSAtIG1wZXJmX3ByZXZpb3VzX2NvdW50W2NwdV07CisJYXBlcmZfZGlmZiA9IGFwZXJmX2N1cnJlbnRfY291bnRbY3B1XSAtIGFwZXJmX3ByZXZpb3VzX2NvdW50W2NwdV07CisJdHNjX2RpZmYgPSB0c2NfYXRfbWVhc3VyZV9lbmQgLSB0c2NfYXRfbWVhc3VyZV9zdGFydDsKKworCSpwZXJjZW50ID0gMTAwLjAgKiBtcGVyZl9kaWZmIC8gdHNjX2RpZmY7CisJZHByaW50KCIlczogbXBlcmZfZGlmZjogJWxsdSwgdHNjX2RpZmY6ICVsbHVcbiIsCisJICAgICAgIG1wZXJmX2NzdGF0ZXNbaWRdLm5hbWUsIG1wZXJmX2RpZmYsIHRzY19kaWZmKTsKKworCWlmIChpZCA9PSBDeCkKKwkJKnBlcmNlbnQgPSAxMDAuMCAtICpwZXJjZW50OworCisJZHByaW50KCIlczogcHJldmlvdXM6ICVsbHUgLSBjdXJyZW50OiAlbGx1IC0gKCV1KVxuIiwgbXBlcmZfY3N0YXRlc1tpZF0ubmFtZSwKKwkgICAgICAgbXBlcmZfZGlmZiwgYXBlcmZfZGlmZiwgY3B1KTsKKwlkcHJpbnQoIiVzOiAlZlxuIiwgbXBlcmZfY3N0YXRlc1tpZF0ubmFtZSwgKnBlcmNlbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1wZXJmX2dldF9jb3VudF9mcmVxKHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgbG9uZyBsb25nICpjb3VudCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGFwZXJmX2RpZmYsIG1wZXJmX2RpZmY7CisKKwlpZiAoaWQgIT0gQVZHX0ZSRVEpCisJCXJldHVybiAxOworCisJaWYgKCFpc192YWxpZFtjcHVdKQorCQlyZXR1cm4gLTE7CisKKwltcGVyZl9kaWZmID0gbXBlcmZfY3VycmVudF9jb3VudFtjcHVdIC0gbXBlcmZfcHJldmlvdXNfY291bnRbY3B1XTsKKwlhcGVyZl9kaWZmID0gYXBlcmZfY3VycmVudF9jb3VudFtjcHVdIC0gYXBlcmZfcHJldmlvdXNfY291bnRbY3B1XTsKKworCS8qIFJldHVybiBNSHogZm9yIG5vdywgbWlnaHQgd2FudCB0byByZXR1cm4gS0h6IGlmIGNvbHVtbiB3aWR0aCBpcyBtb3JlCisJICAgZ2VuZXJpYyAqLworCSpjb3VudCA9IGdldF9hdmVyYWdlX3BlcmYoYXBlcmZfZGlmZiwgbXBlcmZfZGlmZikgLyAxMDAwOworCWRwcmludCgiJXM6ICVsbHVcbiIsIG1wZXJmX2NzdGF0ZXNbaWRdLm5hbWUsICpjb3VudCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGVyZl9zdGFydCh2b2lkKQoreworCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBsb25nIGRiZzsKKworCW1wZXJmX2dldF90c2MoJnRzY19hdF9tZWFzdXJlX3N0YXJ0KTsKKworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2NvdW50OyBjcHUrKykKKwkJbXBlcmZfaW5pdF9zdGF0cyhjcHUpOworCisJbXBlcmZfZ2V0X3RzYygmZGJnKTsKKwlkcHJpbnQoIlRTQyBkaWZmOiAlbGx1XG4iLCBkYmcgLSB0c2NfYXRfbWVhc3VyZV9zdGFydCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXBlcmZfc3RvcCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBkYmc7CisJaW50IGNwdTsKKworCW1wZXJmX2dldF90c2MoJnRzY19hdF9tZWFzdXJlX2VuZCk7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspCisJCW1wZXJmX21lYXN1cmVfc3RhdHMoY3B1KTsKKworCW1wZXJmX2dldF90c2MoJmRiZyk7CisJZHByaW50KCJUU0MgZGlmZjogJWxsdVxuIiwgZGJnIC0gdHNjX2F0X21lYXN1cmVfZW5kKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIG1wZXJmX21vbml0b3I7CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IqIG1wZXJmX3JlZ2lzdGVyKHZvaWQpIHsKKworCXVuc2lnbmVkIGxvbmcgbWluOworCisJaWYgKCEoY3B1cG93ZXJfY3B1X2luZm8uY2FwcyAmIENQVVBPV0VSX0NBUF9BUEVSRikpCisJCXJldHVybiBOVUxMOworCisJLyogQXNzdW1lIG1pbi9tYXggYWxsIHRoZSBzYW1lIG9uIGFsbCBjb3JlcyAqLworCWlmIChjcHVmcmVxX2dldF9oYXJkd2FyZV9saW1pdHMoMCwgJm1pbiwgJm1heF9mcmVxdWVuY3kpKSB7CisJCWRwcmludCgiQ2Fubm90IHJldHJpZXZlIG1heCBmcmVxIGZyb20gY3B1ZnJlcSBrZXJuZWwgIgorCQkgICAgICAgInN1YnN5c3RlbVxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIEZyZWUgdGhpcyBhdCBwcm9ncmFtIHRlcm1pbmF0aW9uICovCisJaXNfdmFsaWQgPSBjYWxsb2MoY3B1X2NvdW50LCBzaXplb2YgKGludCkpOworCW1wZXJmX3ByZXZpb3VzX2NvdW50ID0gY2FsbG9jIChjcHVfY291bnQsCisJCQkJICAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKKwlhcGVyZl9wcmV2aW91c19jb3VudCA9IGNhbGxvYyAoY3B1X2NvdW50LAorCQkJCSAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJbXBlcmZfY3VycmVudF9jb3VudCA9IGNhbGxvYyAoY3B1X2NvdW50LAorCQkJCSAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKKwlhcGVyZl9jdXJyZW50X2NvdW50ID0gY2FsbG9jIChjcHVfY291bnQsCisJCQkJICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykpOworCQorCW1wZXJmX21vbml0b3IubmFtZV9sZW4gPSBzdHJsZW4obXBlcmZfbW9uaXRvci5uYW1lKTsKKwlyZXR1cm4gJm1wZXJmX21vbml0b3I7Cit9CisKK3ZvaWQgbXBlcmZfdW5yZWdpc3Rlcih2b2lkKSB7CisJZnJlZShtcGVyZl9wcmV2aW91c19jb3VudCk7CisJZnJlZShhcGVyZl9wcmV2aW91c19jb3VudCk7CisJZnJlZShtcGVyZl9jdXJyZW50X2NvdW50KTsKKwlmcmVlKGFwZXJmX2N1cnJlbnRfY291bnQpOworCWZyZWUoaXNfdmFsaWQpOworfQorCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIG1wZXJmX21vbml0b3IgPSB7CisJLm5hbWUJCQk9ICJNcGVyZiIsCisJLmh3X3N0YXRlc19udW0JCT0gTVBFUkZfQ1NUQVRFX0NPVU5ULAorCS5od19zdGF0ZXMJCT0gbXBlcmZfY3N0YXRlcywKKwkuc3RhcnQJCQk9IG1wZXJmX3N0YXJ0LAorCS5zdG9wCQkJPSBtcGVyZl9zdG9wLAorCS5kb19yZWdpc3RlcgkJPSBtcGVyZl9yZWdpc3RlciwKKwkudW5yZWdpc3RlcgkJPSBtcGVyZl91bnJlZ2lzdGVyLAorCS5uZWVkc19yb290CQk9IDEsCisJLm92ZXJmbG93X3MJCT0gOTIyMDAwMDAwIC8qIDkyMjMzNzIwMyBzZWNvbmRzIFRTQyBvdmVyZmxvdworCQkJCQkgICAgICAgYXQgMjBHSHogKi8KK307CisjZW5kaWYgLyogI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyNGI2ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogIChDKSAyMDEwLDIwMTEgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiAgQmFzZWQgb24gTGVuIEJyb3duJ3MgPGxlbmJAa2VybmVsLm9yZz4gdHVyYm9zdGF0IHRvb2wuCisgKi8KKworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJpZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5oIgorCisjZGVmaW5lIE1TUl9QS0dfQzNfUkVTSURFTkNZCTB4M0Y4CisjZGVmaW5lIE1TUl9QS0dfQzZfUkVTSURFTkNZCTB4M0Y5CisjZGVmaW5lIE1TUl9DT1JFX0MzX1JFU0lERU5DWQkweDNGQworI2RlZmluZSBNU1JfQ09SRV9DNl9SRVNJREVOQ1kJMHgzRkQKKworI2RlZmluZSBNU1JfVFNDCTB4MTAKKworI2RlZmluZSBOSE1fQ1NUQVRFX0NPVU5UIDQKKworZW51bSBpbnRlbF9uaG1faWQgeyBDMyA9IDAsIEM2LCBQQzMsIFBDNiwgVFNDID0gMHhGRkZGIH07CisKK3N0YXRpYyBpbnQgbmhtX2dldF9jb3VudF9wZXJjZW50KHVuc2lnbmVkIGludCBzZWxmX2lkLCBkb3VibGUgKnBlcmNlbnQsCisJCQkJIHVuc2lnbmVkIGludCBjcHUpOworCitzdGF0aWMgY3N0YXRlX3QgbmhtX2NzdGF0ZXNbTkhNX0NTVEFURV9DT1VOVF0gPSB7CisJeworCQkubmFtZQkJCT0gIkMzIiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgQ29yZSBDMyIpLAorCQkuaWQJCQk9IEMzLAorCQkucmFuZ2UJCQk9IFJBTkdFX0NPUkUsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IG5obV9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJDNiIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIENvcmUgQzYiKSwKKwkJLmlkCQkJPSBDNiwKKwkJLnJhbmdlCQkJPSBSQU5HRV9DT1JFLAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBuaG1fZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKKworCXsKKwkJLm5hbWUJCQk9ICJQQzMiLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBQYWNrYWdlIEMzIiksCisJCS5pZAkJCT0gUEMzLAorCQkucmFuZ2UJCQk9IFJBTkdFX1BBQ0tBR0UsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IG5obV9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJQQzYiLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBQYWNrYWdlIEM2IiksCisJCS5pZAkJCT0gUEM2LAorCQkucmFuZ2UJCQk9IFJBTkdFX1BBQ0tBR0UsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IG5obV9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyB0c2NfYXRfbWVhc3VyZV9zdGFydDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdHNjX2F0X21lYXN1cmVfZW5kOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqcHJldmlvdXNfY291bnRbTkhNX0NTVEFURV9DT1VOVF07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICpjdXJyZW50X2NvdW50W05ITV9DU1RBVEVfQ09VTlRdOworLyogdmFsaWQgZmxhZyBmb3IgYWxsIENQVXMuIElmIGEgTVNSIHJlYWQgZmFpbGVkIGl0IHdpbGwgYmUgemVybyAqLworc3RhdGljIGludCAqaXNfdmFsaWQ7CisKK3N0YXRpYyBpbnQgbmhtX2dldF9jb3VudChlbnVtIGludGVsX25obV9pZCBpZCwgdW5zaWduZWQgbG9uZyBsb25nICp2YWwsIHVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IG1zcjsKKworCXN3aXRjaChpZCkgeworCWNhc2UgQzM6CisJCW1zciA9IE1TUl9DT1JFX0MzX1JFU0lERU5DWTsKKwkJYnJlYWs7CisJY2FzZSBDNjoKKwkJbXNyID0gTVNSX0NPUkVfQzZfUkVTSURFTkNZOworCQlicmVhazsKKwljYXNlIFBDMzoKKwkJbXNyID0gTVNSX1BLR19DM19SRVNJREVOQ1k7CisJCWJyZWFrOworCWNhc2UgUEM2OgorCQltc3IgPSBNU1JfUEtHX0M2X1JFU0lERU5DWTsKKwkJYnJlYWs7CisJY2FzZSBUU0M6CisJCW1zciA9IE1TUl9UU0M7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9OworCWlmIChyZWFkX21zcihjcHUsIG1zciwgdmFsKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmhtX2dldF9jb3VudF9wZXJjZW50KHVuc2lnbmVkIGludCBpZCwgZG91YmxlICpwZXJjZW50LAorCQkJCSB1bnNpZ25lZCBpbnQgY3B1KQoreworCSpwZXJjZW50ID0gMC4wOworCisJaWYgKCFpc192YWxpZFtjcHVdKQorCQlyZXR1cm4gLTE7CisKKwkqcGVyY2VudCA9ICgxMDAuMCAqIChjdXJyZW50X2NvdW50W2lkXVtjcHVdIC0gcHJldmlvdXNfY291bnRbaWRdW2NwdV0pKSAvCisJCSh0c2NfYXRfbWVhc3VyZV9lbmQgLSB0c2NfYXRfbWVhc3VyZV9zdGFydCk7CisKKwlkcHJpbnQoIiVzOiBwcmV2aW91czogJWxsdSAtIGN1cnJlbnQ6ICVsbHUgLSAoJXUpXG4iLCBuaG1fY3N0YXRlc1tpZF0ubmFtZSwKKwkgICAgICAgcHJldmlvdXNfY291bnRbaWRdW2NwdV0sIGN1cnJlbnRfY291bnRbaWRdW2NwdV0sCisJICAgICAgIGNwdSk7CisKKwlkcHJpbnQoIiVzOiB0c2NfZGlmZjogJWxsdSAtIGNvdW50X2RpZmY6ICVsbHUgLSBwZXJjZW50OiAlMi5mICgldSlcbiIsCisJICAgICAgIG5obV9jc3RhdGVzW2lkXS5uYW1lLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB0c2NfYXRfbWVhc3VyZV9lbmQgLSB0c2NfYXRfbWVhc3VyZV9zdGFydCwKKwkgICAgICAgY3VycmVudF9jb3VudFtpZF1bY3B1XSAtIHByZXZpb3VzX2NvdW50W2lkXVtjcHVdLAorCSAgICAgICAqcGVyY2VudCwgY3B1KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5obV9zdGFydCh2b2lkKQoreworCWludCBudW0sIGNwdTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZGJnLCB2YWw7CisKKwluaG1fZ2V0X2NvdW50KFRTQywgJnRzY19hdF9tZWFzdXJlX3N0YXJ0LCAwKTsKKworCWZvciAobnVtID0gMDsgbnVtIDwgTkhNX0NTVEFURV9DT1VOVDsgbnVtKyspIHsKKwkJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKSB7CisJCQlpc192YWxpZFtjcHVdID0gIW5obV9nZXRfY291bnQobnVtLCAmdmFsLCBjcHUpOworCQkJcHJldmlvdXNfY291bnRbbnVtXVtjcHVdID0gdmFsOworCQl9CisJfQorCW5obV9nZXRfY291bnQoVFNDLCAmZGJnLCAwKTsKKwlkcHJpbnQoIlRTQyBkaWZmOiAlbGx1XG4iLCBkYmcgLSB0c2NfYXRfbWVhc3VyZV9zdGFydCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmhtX3N0b3Aodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgbG9uZyBkYmc7CisJaW50IG51bSwgY3B1OworCisJbmhtX2dldF9jb3VudChUU0MsICZ0c2NfYXRfbWVhc3VyZV9lbmQsIDApOworCisJZm9yIChudW0gPSAwOyBudW0gPCBOSE1fQ1NUQVRFX0NPVU5UOyBudW0rKykgeworCQlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspIHsKKwkJCWlzX3ZhbGlkW2NwdV0gPSAhbmhtX2dldF9jb3VudChudW0sICZ2YWwsIGNwdSk7CisJCQljdXJyZW50X2NvdW50W251bV1bY3B1XSA9IHZhbDsKKwkJfQorCX0KKwluaG1fZ2V0X2NvdW50KFRTQywgJmRiZywgMCk7CisJZHByaW50KCJUU0MgZGlmZjogJWxsdVxuIiwgZGJnIC0gdHNjX2F0X21lYXN1cmVfZW5kKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIGludGVsX25obV9tb25pdG9yOworCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yKiBpbnRlbF9uaG1fcmVnaXN0ZXIodm9pZCkgeworCWludCBudW07CisKKwlpZiAoY3B1cG93ZXJfY3B1X2luZm8udmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpCisJCXJldHVybiBOVUxMOworCisJaWYgKCEoY3B1cG93ZXJfY3B1X2luZm8uY2FwcyAmIENQVVBPV0VSX0NBUF9JTlZfVFNDKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIShjcHVwb3dlcl9jcHVfaW5mby5jYXBzICYgQ1BVUE9XRVJfQ0FQX0FQRVJGKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBGcmVlIHRoaXMgYXQgcHJvZ3JhbSB0ZXJtaW5hdGlvbiAqLworCWlzX3ZhbGlkID0gY2FsbG9jKGNwdV9jb3VudCwgc2l6ZW9mIChpbnQpKTsKKwlmb3IgKG51bSA9IDA7IG51bSA8IE5ITV9DU1RBVEVfQ09VTlQ7IG51bSsrKSB7CisJCXByZXZpb3VzX2NvdW50W251bV0gPSBjYWxsb2MgKGNwdV9jb3VudCwKKwkJCQkJICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykpOworCQljdXJyZW50X2NvdW50W251bV0gID0gY2FsbG9jIChjcHVfY291bnQsCisJCQkJCSAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKKwl9CisKKwlpbnRlbF9uaG1fbW9uaXRvci5uYW1lX2xlbiA9IHN0cmxlbihpbnRlbF9uaG1fbW9uaXRvci5uYW1lKTsKKwlyZXR1cm4gJmludGVsX25obV9tb25pdG9yOworfQorCit2b2lkIGludGVsX25obV91bnJlZ2lzdGVyKHZvaWQpIHsKKwlpbnQgbnVtOworCisJZm9yIChudW0gPSAwOyBudW0gPCBOSE1fQ1NUQVRFX0NPVU5UOyBudW0rKykgeworCQlmcmVlKHByZXZpb3VzX2NvdW50W251bV0pOworCQlmcmVlKGN1cnJlbnRfY291bnRbbnVtXSk7CisJfQorCWZyZWUoaXNfdmFsaWQpOworfQorCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIGludGVsX25obV9tb25pdG9yID0geworCS5uYW1lCQkJPSAiTmVoYWxlbSIsCisJLmh3X3N0YXRlc19udW0JCT0gTkhNX0NTVEFURV9DT1VOVCwKKwkuaHdfc3RhdGVzCQk9IG5obV9jc3RhdGVzLAorCS5zdGFydAkJCT0gbmhtX3N0YXJ0LAorCS5zdG9wCQkJPSBuaG1fc3RvcCwKKwkuZG9fcmVnaXN0ZXIJCT0gaW50ZWxfbmhtX3JlZ2lzdGVyLAorCS51bnJlZ2lzdGVyCQk9IGludGVsX25obV91bnJlZ2lzdGVyLAorCS5uZWVkc19yb290CQk9IDEsCisJLm92ZXJmbG93X3MJCT0gOTIyMDAwMDAwIC8qIDkyMjMzNzIwMyBzZWNvbmRzIFRTQyBvdmVyZmxvdworCQkJCQkgICAgICAgYXQgMjBHSHogKi8KK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNjODBhNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogIChDKSAyMDEwLDIwMTEgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiAgQmFzZWQgb24gTGVuIEJyb3duJ3MgPGxlbmJAa2VybmVsLm9yZz4gdHVyYm9zdGF0IHRvb2wuCisgKi8KKworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJpZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5oIgorCisjZGVmaW5lIE1TUl9QS0dfQzJfUkVTSURFTkNZCTB4NjBECisjZGVmaW5lIE1TUl9QS0dfQzdfUkVTSURFTkNZCTB4M0ZBCisjZGVmaW5lIE1TUl9DT1JFX0M3X1JFU0lERU5DWQkweDNGRQorCisjZGVmaW5lIE1TUl9UU0MJMHgxMAorCitlbnVtIGludGVsX3NuYl9pZCB7IEM3ID0gMCwgUEMyLCBQQzcsIFNOQl9DU1RBVEVfQ09VTlQsIFRTQyA9IDB4RkZGRiB9OworCitzdGF0aWMgaW50IHNuYl9nZXRfY291bnRfcGVyY2VudCh1bnNpZ25lZCBpbnQgc2VsZl9pZCwgZG91YmxlICpwZXJjZW50LAorCQkJCSB1bnNpZ25lZCBpbnQgY3B1KTsKKworc3RhdGljIGNzdGF0ZV90IHNuYl9jc3RhdGVzW1NOQl9DU1RBVEVfQ09VTlRdID0geworCXsKKwkJLm5hbWUJCQk9ICJDNyIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIENvcmUgQzciKSwKKwkJLmlkCQkJPSBDNywKKwkJLnJhbmdlCQkJPSBSQU5HRV9DT1JFLAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBzbmJfZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiUEMyIiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgUGFja2FnZSBDMiIpLAorCQkuaWQJCQk9IFBDMiwKKwkJLnJhbmdlCQkJPSBSQU5HRV9QQUNLQUdFLAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBzbmJfZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiUEM3IiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgUGFja2FnZSBDNyIpLAorCQkuaWQJCQk9IFBDNywKKwkJLnJhbmdlCQkJPSBSQU5HRV9QQUNLQUdFLAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBzbmJfZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdHNjX2F0X21lYXN1cmVfc3RhcnQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHRzY19hdF9tZWFzdXJlX2VuZDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKnByZXZpb3VzX2NvdW50W1NOQl9DU1RBVEVfQ09VTlRdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqY3VycmVudF9jb3VudFtTTkJfQ1NUQVRFX0NPVU5UXTsKKy8qIHZhbGlkIGZsYWcgZm9yIGFsbCBDUFVzLiBJZiBhIE1TUiByZWFkIGZhaWxlZCBpdCB3aWxsIGJlIHplcm8gKi8KK3N0YXRpYyBpbnQgKmlzX3ZhbGlkOworCitzdGF0aWMgaW50IHNuYl9nZXRfY291bnQoZW51bSBpbnRlbF9zbmJfaWQgaWQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqdmFsLCB1bnNpZ25lZCBpbnQgY3B1KQoreworCWludCBtc3I7CisKKwlzd2l0Y2goaWQpIHsKKwljYXNlIEM3OgorCQltc3IgPSBNU1JfQ09SRV9DN19SRVNJREVOQ1k7CisJCWJyZWFrOworCWNhc2UgUEMyOgorCQltc3IgPSBNU1JfUEtHX0MyX1JFU0lERU5DWTsKKwkJYnJlYWs7CisJY2FzZSBQQzc6CisJCW1zciA9IE1TUl9QS0dfQzdfUkVTSURFTkNZOworCQlicmVhazsKKwljYXNlIFRTQzoKKwkJbXNyID0gTVNSX1RTQzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCX07CisJaWYgKHJlYWRfbXNyKGNwdSwgbXNyLCB2YWwpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25iX2dldF9jb3VudF9wZXJjZW50KHVuc2lnbmVkIGludCBpZCwgZG91YmxlICpwZXJjZW50LAorCQkJCSB1bnNpZ25lZCBpbnQgY3B1KQoreworCSpwZXJjZW50ID0gMC4wOworCisJaWYgKCFpc192YWxpZFtjcHVdKQorCQlyZXR1cm4gLTE7CisKKwkqcGVyY2VudCA9ICgxMDAuMCAqIChjdXJyZW50X2NvdW50W2lkXVtjcHVdIC0gcHJldmlvdXNfY291bnRbaWRdW2NwdV0pKSAvCisJCSh0c2NfYXRfbWVhc3VyZV9lbmQgLSB0c2NfYXRfbWVhc3VyZV9zdGFydCk7CisKKwlkcHJpbnQoIiVzOiBwcmV2aW91czogJWxsdSAtIGN1cnJlbnQ6ICVsbHUgLSAoJXUpXG4iLCBzbmJfY3N0YXRlc1tpZF0ubmFtZSwKKwkgICAgICAgcHJldmlvdXNfY291bnRbaWRdW2NwdV0sIGN1cnJlbnRfY291bnRbaWRdW2NwdV0sCisJICAgICAgIGNwdSk7CisKKwlkcHJpbnQoIiVzOiB0c2NfZGlmZjogJWxsdSAtIGNvdW50X2RpZmY6ICVsbHUgLSBwZXJjZW50OiAlMi5mICgldSlcbiIsCisJICAgICAgIHNuYl9jc3RhdGVzW2lkXS5uYW1lLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB0c2NfYXRfbWVhc3VyZV9lbmQgLSB0c2NfYXRfbWVhc3VyZV9zdGFydCwKKwkgICAgICAgY3VycmVudF9jb3VudFtpZF1bY3B1XQorCSAgICAgICAtIHByZXZpb3VzX2NvdW50W2lkXVtjcHVdLAorCSAgICAgICAqcGVyY2VudCwgY3B1KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuYl9zdGFydCh2b2lkKQoreworCWludCBudW0sIGNwdTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCisJZm9yIChudW0gPSAwOyBudW0gPCBTTkJfQ1NUQVRFX0NPVU5UOyBudW0rKykgeworCQlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspIHsKKwkJCXNuYl9nZXRfY291bnQobnVtLCAmdmFsLCBjcHUpOworCQkJcHJldmlvdXNfY291bnRbbnVtXVtjcHVdID0gdmFsOworCQl9CisJfQorCXNuYl9nZXRfY291bnQoVFNDLCAmdHNjX2F0X21lYXN1cmVfc3RhcnQsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuYl9zdG9wKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKwlpbnQgbnVtLCBjcHU7CisKKwlzbmJfZ2V0X2NvdW50KFRTQywgJnRzY19hdF9tZWFzdXJlX2VuZCwgMCk7CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IFNOQl9DU1RBVEVfQ09VTlQ7IG51bSsrKSB7CisJCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2NvdW50OyBjcHUrKykgeworCQkJaXNfdmFsaWRbY3B1XSA9ICFzbmJfZ2V0X2NvdW50KG51bSwgJnZhbCwgY3B1KTsKKwkJCWN1cnJlbnRfY291bnRbbnVtXVtjcHVdID0gdmFsOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIGludGVsX3NuYl9tb25pdG9yOworCitzdGF0aWMgc3RydWN0IGNwdWlkbGVfbW9uaXRvciogc25iX3JlZ2lzdGVyKHZvaWQpIHsKKworCWludCBudW07CisKKwlpZiAoY3B1cG93ZXJfY3B1X2luZm8udmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwKKwkgICAgfHwgY3B1cG93ZXJfY3B1X2luZm8uZmFtaWx5ICE9IDYpCisJCXJldHVybiBOVUxMOworCisJaWYgKGNwdXBvd2VyX2NwdV9pbmZvLm1vZGVsICE9IDB4MkEKKwkgICAgJiYgY3B1cG93ZXJfY3B1X2luZm8ubW9kZWwgIT0gMHgyRCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpc192YWxpZCA9IGNhbGxvYyhjcHVfY291bnQsIHNpemVvZiAoaW50KSk7CisJZm9yIChudW0gPSAwOyBudW0gPCBTTkJfQ1NUQVRFX0NPVU5UOyBudW0rKykgeworCQlwcmV2aW91c19jb3VudFtudW1dID0gY2FsbG9jIChjcHVfY291bnQsCisJCQkJCSAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKKwkJY3VycmVudF9jb3VudFtudW1dICA9IGNhbGxvYyAoY3B1X2NvdW50LAorCQkJCQkgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJfQorCWludGVsX3NuYl9tb25pdG9yLm5hbWVfbGVuID0gc3RybGVuKGludGVsX3NuYl9tb25pdG9yLm5hbWUpOworCXJldHVybiAmaW50ZWxfc25iX21vbml0b3I7Cit9CisKK3ZvaWQgc25iX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlpbnQgbnVtOworCWZyZWUoaXNfdmFsaWQpOworCWZvciAobnVtID0gMDsgbnVtIDwgU05CX0NTVEFURV9DT1VOVDsgbnVtKyspIHsKKwkJZnJlZShwcmV2aW91c19jb3VudFtudW1dKTsKKwkJZnJlZShjdXJyZW50X2NvdW50W251bV0pOworCX0KK30KKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciBpbnRlbF9zbmJfbW9uaXRvciA9IHsKKwkubmFtZQkJCT0gIlNhbmR5QnJpZGdlIiwKKwkuaHdfc3RhdGVzCQk9IHNuYl9jc3RhdGVzLAorCS5od19zdGF0ZXNfbnVtCQk9IFNOQl9DU1RBVEVfQ09VTlQsCisJLnN0YXJ0CQkJPSBzbmJfc3RhcnQsCisJLnN0b3AJCQk9IHNuYl9zdG9wLAorCS5kb19yZWdpc3RlcgkJPSBzbmJfcmVnaXN0ZXIsCisJLnVucmVnaXN0ZXIJCT0gc25iX3VucmVnaXN0ZXIsCisJLm5lZWRzX3Jvb3QJCT0gMSwKKwkub3ZlcmZsb3dfcwkJPSA5MjIwMDAwMDAgLyogOTIyMzM3MjAzIHNlY29uZHMgVFNDIG92ZXJmbG93CisJCQkJCSAgICAgICBhdCAyMEdIeiAqLworfTsKKyNlbmRpZiAvKiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pICovCg==